vxe-pc-ui 3.0.0 → 3.0.1

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 (331) hide show
  1. package/es/button/src/button.js +3 -0
  2. package/es/carousel/index.js +12 -0
  3. package/es/carousel/src/carousel-item.js +100 -0
  4. package/es/carousel/src/carousel.js +418 -0
  5. package/es/carousel/src/util.js +17 -0
  6. package/es/carousel/style.css +185 -0
  7. package/es/carousel/style.min.css +1 -0
  8. package/es/carousel-item/index.js +12 -0
  9. package/es/carousel-item/style.css +0 -0
  10. package/es/carousel-item/style.min.css +0 -0
  11. package/es/checkbox/index.js +12 -0
  12. package/es/checkbox/src/checkbox.js +159 -0
  13. package/es/checkbox/src/group.js +154 -0
  14. package/es/checkbox/style.css +117 -0
  15. package/es/checkbox/style.min.css +1 -0
  16. package/es/checkbox-group/index.js +12 -0
  17. package/es/checkbox-group/style.css +0 -0
  18. package/es/checkbox-group/style.min.css +0 -0
  19. package/es/components.js +39 -39
  20. package/es/date-picker/src/date-picker.js +3 -0
  21. package/es/icon/style.css +1 -1
  22. package/es/icon-picker/index.js +12 -0
  23. package/es/icon-picker/src/icon-picker.js +668 -0
  24. package/es/icon-picker/style.css +207 -0
  25. package/es/icon-picker/style.min.css +1 -0
  26. package/es/input/index.js +12 -0
  27. package/es/input/src/input.js +2892 -0
  28. package/es/input/style.css +941 -0
  29. package/es/input/style.min.css +1 -0
  30. package/es/layout-footer/src/layout-footer.js +2 -1
  31. package/es/layout-header/src/layout-header.js +2 -1
  32. package/es/optgroup/index.js +12 -0
  33. package/es/optgroup/style.css +0 -0
  34. package/es/optgroup/style.min.css +0 -0
  35. package/es/option/index.js +12 -0
  36. package/es/option/style.css +0 -0
  37. package/es/option/style.min.css +0 -0
  38. package/es/pager/index.js +12 -0
  39. package/es/pager/src/pager.js +687 -0
  40. package/es/password-input/index.js +12 -0
  41. package/es/password-input/src/password-input.js +388 -0
  42. package/es/password-input/style.css +604 -0
  43. package/es/password-input/style.min.css +1 -0
  44. package/es/pulldown/src/pulldown.js +5 -1
  45. package/es/select/index.js +12 -0
  46. package/es/select/src/optgroup.js +90 -0
  47. package/es/select/src/option-info.js +16 -0
  48. package/es/select/src/option.js +86 -0
  49. package/es/select/src/select.js +1269 -0
  50. package/es/select/src/util.js +35 -0
  51. package/es/select/style.css +207 -0
  52. package/es/select/style.min.css +1 -0
  53. package/es/style.css +1 -1
  54. package/es/style.min.css +1 -1
  55. package/es/tab-pane/index.js +12 -0
  56. package/es/tab-pane/style.css +0 -0
  57. package/es/tab-pane/style.min.css +0 -0
  58. package/es/tabs/index.js +12 -0
  59. package/es/tabs/src/tab-pane.js +119 -0
  60. package/es/tabs/src/tabs.js +593 -0
  61. package/es/tabs/src/util.js +17 -0
  62. package/es/tabs/style.css +342 -0
  63. package/es/tabs/style.min.css +1 -0
  64. package/es/ui/index.js +1 -1
  65. package/es/ui/src/log.js +1 -1
  66. package/es/vxe-carousel/index.js +3 -0
  67. package/es/vxe-carousel/style.css +185 -0
  68. package/es/vxe-carousel/style.min.css +1 -0
  69. package/es/vxe-carousel-item/index.js +3 -0
  70. package/es/vxe-carousel-item/style.css +0 -0
  71. package/es/vxe-carousel-item/style.min.css +0 -0
  72. package/es/vxe-checkbox/index.js +3 -0
  73. package/es/vxe-checkbox/style.css +117 -0
  74. package/es/vxe-checkbox/style.min.css +1 -0
  75. package/es/vxe-checkbox-group/index.js +3 -0
  76. package/es/vxe-checkbox-group/style.css +0 -0
  77. package/es/vxe-checkbox-group/style.min.css +0 -0
  78. package/es/vxe-icon-picker/index.js +3 -0
  79. package/es/vxe-icon-picker/style.css +207 -0
  80. package/es/vxe-icon-picker/style.min.css +1 -0
  81. package/es/vxe-input/index.js +3 -0
  82. package/es/vxe-input/style.css +941 -0
  83. package/es/vxe-input/style.min.css +1 -0
  84. package/es/vxe-optgroup/index.js +3 -0
  85. package/es/vxe-optgroup/style.css +0 -0
  86. package/es/vxe-optgroup/style.min.css +0 -0
  87. package/es/vxe-option/index.js +3 -0
  88. package/es/vxe-option/style.css +0 -0
  89. package/es/vxe-option/style.min.css +0 -0
  90. package/es/vxe-password-input/index.js +3 -0
  91. package/es/vxe-password-input/style.css +604 -0
  92. package/es/vxe-password-input/style.min.css +1 -0
  93. package/es/vxe-select/index.js +3 -0
  94. package/es/vxe-select/style.css +207 -0
  95. package/es/vxe-select/style.min.css +1 -0
  96. package/es/vxe-tab-pane/index.js +3 -0
  97. package/es/vxe-tab-pane/style.css +0 -0
  98. package/es/vxe-tab-pane/style.min.css +0 -0
  99. package/es/vxe-tabs/index.js +3 -0
  100. package/es/vxe-tabs/style.css +342 -0
  101. package/es/vxe-tabs/style.min.css +1 -0
  102. package/lib/button/src/button.js +3 -0
  103. package/lib/button/src/button.min.js +1 -1
  104. package/lib/carousel/index.js +19 -0
  105. package/lib/carousel/index.min.js +1 -0
  106. package/lib/carousel/src/carousel-item.js +107 -0
  107. package/lib/carousel/src/carousel-item.min.js +1 -0
  108. package/lib/carousel/src/carousel.js +437 -0
  109. package/lib/carousel/src/carousel.min.js +1 -0
  110. package/lib/carousel/src/util.js +27 -0
  111. package/lib/carousel/src/util.min.js +1 -0
  112. package/lib/carousel/style/index.js +1 -0
  113. package/lib/carousel/style/style.css +185 -0
  114. package/lib/carousel/style/style.min.css +1 -0
  115. package/lib/carousel-item/index.js +19 -0
  116. package/lib/carousel-item/index.min.js +1 -0
  117. package/lib/carousel-item/style/index.js +1 -0
  118. package/lib/carousel-item/style/style.css +0 -0
  119. package/lib/carousel-item/style/style.min.css +0 -0
  120. package/lib/checkbox/index.js +19 -0
  121. package/lib/checkbox/index.min.js +1 -0
  122. package/lib/checkbox/src/checkbox.js +169 -0
  123. package/lib/checkbox/src/checkbox.min.js +1 -0
  124. package/lib/checkbox/src/group.js +164 -0
  125. package/lib/checkbox/src/group.min.js +1 -0
  126. package/lib/checkbox/style/index.js +1 -0
  127. package/lib/checkbox/style/style.css +117 -0
  128. package/lib/checkbox/style/style.min.css +1 -0
  129. package/lib/checkbox-group/index.js +19 -0
  130. package/lib/checkbox-group/index.min.js +1 -0
  131. package/lib/checkbox-group/style/index.js +1 -0
  132. package/lib/checkbox-group/style/style.css +0 -0
  133. package/lib/checkbox-group/style/style.min.css +0 -0
  134. package/lib/components.js +159 -60
  135. package/lib/components.min.js +1 -1
  136. package/lib/date-picker/src/date-picker.js +3 -0
  137. package/lib/date-picker/src/date-picker.min.js +1 -1
  138. package/lib/icon/style/style.css +1 -1
  139. package/lib/icon/style/style.min.css +1 -1
  140. package/lib/icon-picker/index.js +19 -0
  141. package/lib/icon-picker/index.min.js +1 -0
  142. package/lib/icon-picker/src/icon-picker.js +646 -0
  143. package/lib/icon-picker/src/icon-picker.min.js +1 -0
  144. package/lib/icon-picker/style/index.js +1 -0
  145. package/lib/icon-picker/style/style.css +207 -0
  146. package/lib/icon-picker/style/style.min.css +1 -0
  147. package/lib/index.umd.js +15870 -7738
  148. package/lib/index.umd.min.js +1 -1
  149. package/lib/input/index.js +19 -0
  150. package/lib/input/index.min.js +1 -0
  151. package/lib/input/src/input.js +2897 -0
  152. package/lib/input/src/input.min.js +1 -0
  153. package/lib/input/style/index.js +1 -0
  154. package/lib/input/style/style.css +941 -0
  155. package/lib/input/style/style.min.css +1 -0
  156. package/lib/layout-footer/src/layout-footer.js +2 -1
  157. package/lib/layout-header/src/layout-header.js +2 -1
  158. package/lib/optgroup/index.js +19 -0
  159. package/lib/optgroup/index.min.js +1 -0
  160. package/lib/optgroup/style/index.js +1 -0
  161. package/lib/optgroup/style/style.css +0 -0
  162. package/lib/optgroup/style/style.min.css +0 -0
  163. package/lib/option/index.js +19 -0
  164. package/lib/option/index.min.js +1 -0
  165. package/lib/option/style/index.js +1 -0
  166. package/lib/option/style/style.css +0 -0
  167. package/lib/option/style/style.min.css +0 -0
  168. package/lib/pager/index.js +19 -0
  169. package/lib/pager/index.min.js +1 -0
  170. package/lib/pager/src/pager.js +714 -0
  171. package/lib/pager/src/pager.min.js +1 -0
  172. package/lib/password-input/index.js +19 -0
  173. package/lib/password-input/index.min.js +1 -0
  174. package/lib/password-input/src/password-input.js +398 -0
  175. package/lib/password-input/src/password-input.min.js +1 -0
  176. package/lib/password-input/style/index.js +1 -0
  177. package/lib/password-input/style/style.css +604 -0
  178. package/lib/password-input/style/style.min.css +1 -0
  179. package/lib/pulldown/src/pulldown.js +5 -1
  180. package/lib/pulldown/src/pulldown.min.js +1 -1
  181. package/lib/select/index.js +19 -0
  182. package/lib/select/index.min.js +1 -0
  183. package/lib/select/src/optgroup.js +97 -0
  184. package/lib/select/src/optgroup.min.js +1 -0
  185. package/lib/select/src/option-info.js +33 -0
  186. package/lib/select/src/option-info.min.js +1 -0
  187. package/lib/select/src/option.js +93 -0
  188. package/lib/select/src/option.min.js +1 -0
  189. package/lib/select/src/select.js +1315 -0
  190. package/lib/select/src/select.min.js +1 -0
  191. package/lib/select/src/util.js +50 -0
  192. package/lib/select/src/util.min.js +1 -0
  193. package/lib/select/style/index.js +1 -0
  194. package/lib/select/style/style.css +207 -0
  195. package/lib/select/style/style.min.css +1 -0
  196. package/lib/style.css +1 -1
  197. package/lib/style.min.css +1 -1
  198. package/lib/tab-pane/index.js +19 -0
  199. package/lib/tab-pane/index.min.js +1 -0
  200. package/lib/tab-pane/style/index.js +1 -0
  201. package/lib/tab-pane/style/style.css +0 -0
  202. package/lib/tab-pane/style/style.min.css +0 -0
  203. package/lib/tabs/index.js +19 -0
  204. package/lib/tabs/index.min.js +1 -0
  205. package/lib/tabs/src/tab-pane.js +128 -0
  206. package/lib/tabs/src/tab-pane.min.js +1 -0
  207. package/lib/tabs/src/tabs.js +630 -0
  208. package/lib/tabs/src/tabs.min.js +1 -0
  209. package/lib/tabs/src/util.js +29 -0
  210. package/lib/tabs/src/util.min.js +1 -0
  211. package/lib/tabs/style/index.js +1 -0
  212. package/lib/tabs/style/style.css +342 -0
  213. package/lib/tabs/style/style.min.css +1 -0
  214. package/lib/ui/index.js +1 -1
  215. package/lib/ui/index.min.js +1 -1
  216. package/lib/ui/src/log.js +1 -1
  217. package/lib/ui/src/log.min.js +1 -1
  218. package/lib/vxe-carousel/index.js +23 -0
  219. package/lib/vxe-carousel/index.min.js +1 -0
  220. package/lib/vxe-carousel/style/index.js +1 -0
  221. package/lib/vxe-carousel/style/style.css +185 -0
  222. package/lib/vxe-carousel/style/style.min.css +1 -0
  223. package/lib/vxe-carousel-item/index.js +23 -0
  224. package/lib/vxe-carousel-item/index.min.js +1 -0
  225. package/lib/vxe-carousel-item/style/index.js +1 -0
  226. package/lib/vxe-carousel-item/style/style.css +0 -0
  227. package/lib/vxe-carousel-item/style/style.min.css +0 -0
  228. package/lib/vxe-checkbox/index.js +23 -0
  229. package/lib/vxe-checkbox/index.min.js +1 -0
  230. package/lib/vxe-checkbox/style/index.js +1 -0
  231. package/lib/vxe-checkbox/style/style.css +117 -0
  232. package/lib/vxe-checkbox/style/style.min.css +1 -0
  233. package/lib/vxe-checkbox-group/index.js +23 -0
  234. package/lib/vxe-checkbox-group/index.min.js +1 -0
  235. package/lib/vxe-checkbox-group/style/index.js +1 -0
  236. package/lib/vxe-checkbox-group/style/style.css +0 -0
  237. package/lib/vxe-checkbox-group/style/style.min.css +0 -0
  238. package/lib/vxe-icon-picker/index.js +23 -0
  239. package/lib/vxe-icon-picker/index.min.js +1 -0
  240. package/lib/vxe-icon-picker/style/index.js +1 -0
  241. package/lib/vxe-icon-picker/style/style.css +207 -0
  242. package/lib/vxe-icon-picker/style/style.min.css +1 -0
  243. package/lib/vxe-input/index.js +23 -0
  244. package/lib/vxe-input/index.min.js +1 -0
  245. package/lib/vxe-input/style/index.js +1 -0
  246. package/lib/vxe-input/style/style.css +941 -0
  247. package/lib/vxe-input/style/style.min.css +1 -0
  248. package/lib/vxe-optgroup/index.js +23 -0
  249. package/lib/vxe-optgroup/index.min.js +1 -0
  250. package/lib/vxe-optgroup/style/index.js +1 -0
  251. package/lib/vxe-optgroup/style/style.css +0 -0
  252. package/lib/vxe-optgroup/style/style.min.css +0 -0
  253. package/lib/vxe-option/index.js +23 -0
  254. package/lib/vxe-option/index.min.js +1 -0
  255. package/lib/vxe-option/style/index.js +1 -0
  256. package/lib/vxe-option/style/style.css +0 -0
  257. package/lib/vxe-option/style/style.min.css +0 -0
  258. package/lib/vxe-password-input/index.js +23 -0
  259. package/lib/vxe-password-input/index.min.js +1 -0
  260. package/lib/vxe-password-input/style/index.js +1 -0
  261. package/lib/vxe-password-input/style/style.css +604 -0
  262. package/lib/vxe-password-input/style/style.min.css +1 -0
  263. package/lib/vxe-select/index.js +23 -0
  264. package/lib/vxe-select/index.min.js +1 -0
  265. package/lib/vxe-select/style/index.js +1 -0
  266. package/lib/vxe-select/style/style.css +207 -0
  267. package/lib/vxe-select/style/style.min.css +1 -0
  268. package/lib/vxe-tab-pane/index.js +23 -0
  269. package/lib/vxe-tab-pane/index.min.js +1 -0
  270. package/lib/vxe-tab-pane/style/index.js +1 -0
  271. package/lib/vxe-tab-pane/style/style.css +0 -0
  272. package/lib/vxe-tab-pane/style/style.min.css +0 -0
  273. package/lib/vxe-tabs/index.js +23 -0
  274. package/lib/vxe-tabs/index.min.js +1 -0
  275. package/lib/vxe-tabs/style/index.js +1 -0
  276. package/lib/vxe-tabs/style/style.css +342 -0
  277. package/lib/vxe-tabs/style/style.min.css +1 -0
  278. package/package.json +1 -1
  279. package/packages/button/src/button.ts +3 -0
  280. package/packages/carousel/index.ts +16 -0
  281. package/packages/carousel/src/carousel-item.ts +114 -0
  282. package/packages/carousel/src/carousel.ts +449 -0
  283. package/packages/carousel/src/util.ts +21 -0
  284. package/packages/carousel-item/index.ts +16 -0
  285. package/packages/checkbox/index.ts +16 -0
  286. package/packages/checkbox/src/checkbox.ts +176 -0
  287. package/packages/checkbox/src/group.ts +178 -0
  288. package/packages/checkbox-group/index.ts +16 -0
  289. package/packages/components.ts +39 -39
  290. package/packages/date-picker/src/date-picker.ts +3 -0
  291. package/packages/icon-picker/index.ts +16 -0
  292. package/packages/icon-picker/src/icon-picker.ts +711 -0
  293. package/packages/input/index.ts +16 -0
  294. package/packages/input/src/input.ts +2995 -0
  295. package/packages/layout-footer/src/layout-footer.ts +4 -3
  296. package/packages/layout-header/src/layout-header.ts +2 -1
  297. package/packages/optgroup/index.ts +16 -0
  298. package/packages/option/index.ts +16 -0
  299. package/packages/pager/index.ts +16 -0
  300. package/packages/pager/src/pager.ts +743 -0
  301. package/packages/password-input/index.ts +16 -0
  302. package/packages/password-input/src/password-input.ts +427 -0
  303. package/packages/pulldown/src/pulldown.ts +5 -1
  304. package/packages/select/index.ts +16 -0
  305. package/packages/select/src/optgroup.ts +107 -0
  306. package/packages/select/src/option-info.ts +20 -0
  307. package/packages/select/src/option.ts +103 -0
  308. package/packages/select/src/select.ts +1325 -0
  309. package/packages/select/src/util.ts +46 -0
  310. package/packages/tab-pane/index.ts +16 -0
  311. package/packages/tabs/index.ts +16 -0
  312. package/packages/tabs/src/tab-pane.ts +136 -0
  313. package/packages/tabs/src/tabs.ts +630 -0
  314. package/packages/tabs/src/util.ts +21 -0
  315. package/types/components/carousel.d.ts +5 -0
  316. package/types/components/icon-picker.d.ts +4 -0
  317. package/types/components/input.d.ts +9 -1
  318. package/types/components/optgroup.d.ts +10 -4
  319. package/types/components/tabs.d.ts +4 -0
  320. /package/es/icon/style/{iconfont.1725630285930.ttf → iconfont.1725723159302.ttf} +0 -0
  321. /package/es/icon/style/{iconfont.1725630285930.woff → iconfont.1725723159302.woff} +0 -0
  322. /package/es/icon/style/{iconfont.1725630285930.woff2 → iconfont.1725723159302.woff2} +0 -0
  323. /package/es/{iconfont.1725630285930.ttf → iconfont.1725723159302.ttf} +0 -0
  324. /package/es/{iconfont.1725630285930.woff → iconfont.1725723159302.woff} +0 -0
  325. /package/es/{iconfont.1725630285930.woff2 → iconfont.1725723159302.woff2} +0 -0
  326. /package/lib/icon/style/{iconfont.1725630285930.ttf → iconfont.1725723159302.ttf} +0 -0
  327. /package/lib/icon/style/{iconfont.1725630285930.woff → iconfont.1725723159302.woff} +0 -0
  328. /package/lib/icon/style/{iconfont.1725630285930.woff2 → iconfont.1725723159302.woff2} +0 -0
  329. /package/lib/{iconfont.1725630285930.ttf → iconfont.1725723159302.ttf} +0 -0
  330. /package/lib/{iconfont.1725630285930.woff → iconfont.1725723159302.woff} +0 -0
  331. /package/lib/{iconfont.1725630285930.woff2 → iconfont.1725723159302.woff2} +0 -0
@@ -0,0 +1,593 @@
1
+ import { defineVxeComponent } from '../../ui/src/comp';
2
+ import XEUtils from 'xe-utils';
3
+ import { createEvent, getConfig, getIcon, globalEvents, permission, renderEmptyElement } from '../../ui';
4
+ import { getSlotVNs } from '../../ui/src/vn';
5
+ import { toCssUnit } from '../..//ui/src/dom';
6
+ import { warnLog } from '../../ui/src/log';
7
+ export default defineVxeComponent({
8
+ name: 'VxeTabs',
9
+ props: {
10
+ value: [String, Number, Boolean],
11
+ options: Array,
12
+ height: [String, Number],
13
+ destroyOnClose: Boolean,
14
+ titleWidth: [String, Number],
15
+ titleAlign: [String, Number],
16
+ type: String,
17
+ showClose: Boolean,
18
+ padding: {
19
+ type: Boolean,
20
+ default: () => getConfig().tabs.padding
21
+ },
22
+ trigger: String,
23
+ beforeChangeMethod: Function,
24
+ beforeCloseMethod: Function
25
+ },
26
+ inject: {
27
+ $xeParentTabs: {
28
+ from: '$xeTabs',
29
+ default: null
30
+ }
31
+ },
32
+ provide() {
33
+ const $xeTabs = this;
34
+ return {
35
+ $xeTabs
36
+ };
37
+ },
38
+ data() {
39
+ const xID = XEUtils.uniqueId();
40
+ const reactData = {
41
+ staticTabs: [],
42
+ activeName: null,
43
+ initNames: [],
44
+ lintLeft: 0,
45
+ lintWidth: 0,
46
+ isTabOver: false,
47
+ resizeFlag: 1
48
+ };
49
+ const internalData = {
50
+ slTimeout: undefined
51
+ };
52
+ return {
53
+ xID,
54
+ reactData,
55
+ internalData
56
+ };
57
+ },
58
+ computed: Object.assign(Object.assign({}, {}), { computeParentResizeFlag() {
59
+ const $xeTabs = this;
60
+ const $xeParentTabs = $xeTabs.$xeParentTabs;
61
+ return $xeParentTabs ? $xeParentTabs.reactData.resizeFlag : null;
62
+ },
63
+ computeTabOptions() {
64
+ const $xeTabs = this;
65
+ const props = $xeTabs;
66
+ const options = props.options;
67
+ return (options || []).filter((item) => $xeTabs.handleFilterTab(item));
68
+ },
69
+ computeTabStaticOptions() {
70
+ const $xeTabs = this;
71
+ const reactData = $xeTabs.reactData;
72
+ const staticTabs = reactData.staticTabs;
73
+ return staticTabs.filter((item) => $xeTabs.handleFilterTab(item));
74
+ } }),
75
+ methods: {
76
+ //
77
+ // Method
78
+ //
79
+ dispatchEvent(type, params, evnt) {
80
+ const $xeTabs = this;
81
+ $xeTabs.$emit(type, createEvent(evnt, { $tabs: $xeTabs }, params));
82
+ },
83
+ prev() {
84
+ const $xeTabs = this;
85
+ return $xeTabs.handlePrevNext(false);
86
+ },
87
+ next() {
88
+ const $xeTabs = this;
89
+ return $xeTabs.handlePrevNext(true);
90
+ },
91
+ prevTab() {
92
+ const $xeTabs = this;
93
+ if (process.env.NODE_ENV === 'development') {
94
+ warnLog('vxe.error.delFunc', ['prevTab', 'prev']);
95
+ }
96
+ return $xeTabs.prev();
97
+ },
98
+ nextTab() {
99
+ const $xeTabs = this;
100
+ if (process.env.NODE_ENV === 'development') {
101
+ warnLog('vxe.error.delFunc', ['nextTab', 'next']);
102
+ }
103
+ return $xeTabs.next();
104
+ },
105
+ handleFilterTab(item) {
106
+ const { permissionCode } = item;
107
+ if (permissionCode) {
108
+ if (!permission.checkVisible(permissionCode)) {
109
+ return false;
110
+ }
111
+ }
112
+ return true;
113
+ },
114
+ callSlot(slotFunc, params) {
115
+ const $xeTabs = this;
116
+ const slots = $xeTabs.$scopedSlots;
117
+ if (slotFunc) {
118
+ if (XEUtils.isString(slotFunc)) {
119
+ slotFunc = slots[slotFunc] || null;
120
+ }
121
+ if (XEUtils.isFunction(slotFunc)) {
122
+ return getSlotVNs(slotFunc(params));
123
+ }
124
+ }
125
+ return [];
126
+ },
127
+ updateTabStyle() {
128
+ const $xeTabs = this;
129
+ const props = $xeTabs;
130
+ const reactData = $xeTabs.reactData;
131
+ $xeTabs.$nextTick(() => {
132
+ const { type } = props;
133
+ const { activeName } = reactData;
134
+ const tabOptions = $xeTabs.computeTabOptions;
135
+ const tabStaticOptions = $xeTabs.computeTabStaticOptions;
136
+ const headerWrapperEl = $xeTabs.$refs.refHeadWrapperElem;
137
+ let lintWidth = 0;
138
+ let lintLeft = 0;
139
+ let isOver = false;
140
+ if (headerWrapperEl) {
141
+ const index = XEUtils.findIndexOf(tabStaticOptions.length ? tabStaticOptions : tabOptions, item => item.name === activeName);
142
+ const { children, scrollWidth, clientWidth } = headerWrapperEl;
143
+ isOver = scrollWidth !== clientWidth;
144
+ if (index > -1) {
145
+ const tabEl = children[index];
146
+ const tabWidth = tabEl.clientWidth;
147
+ if (type) {
148
+ if (type === 'card') {
149
+ lintWidth = tabWidth + 2;
150
+ lintLeft = tabEl.offsetLeft;
151
+ }
152
+ else if (type === 'border-card') {
153
+ lintWidth = tabWidth + 2;
154
+ lintLeft = tabEl.offsetLeft - 1;
155
+ }
156
+ }
157
+ else {
158
+ lintWidth = Math.max(4, Math.floor(tabWidth * 0.6));
159
+ lintLeft = tabEl.offsetLeft + Math.floor((tabWidth - lintWidth) / 2);
160
+ }
161
+ }
162
+ }
163
+ reactData.lintLeft = lintLeft;
164
+ reactData.lintWidth = lintWidth;
165
+ reactData.isTabOver = isOver;
166
+ });
167
+ },
168
+ addInitName(name, evnt) {
169
+ const $xeTabs = this;
170
+ const reactData = $xeTabs.reactData;
171
+ const { initNames } = reactData;
172
+ if (name && !initNames.includes(name)) {
173
+ $xeTabs.dispatchEvent('tab-load', { name }, evnt);
174
+ initNames.push(name);
175
+ return true;
176
+ }
177
+ return false;
178
+ },
179
+ initDefaultName(list) {
180
+ const $xeTabs = this;
181
+ const props = $xeTabs;
182
+ const reactData = $xeTabs.reactData;
183
+ let activeName = null;
184
+ if (list && list.length) {
185
+ let validVal = false;
186
+ activeName = props.value;
187
+ list.forEach((item) => {
188
+ if (activeName === item.name) {
189
+ validVal = true;
190
+ }
191
+ if (item && item.preload) {
192
+ $xeTabs.addInitName(item.name, null);
193
+ }
194
+ });
195
+ if (!validVal) {
196
+ activeName = list[0].name;
197
+ $xeTabs.addInitName(activeName, null);
198
+ $xeTabs.$emit('input', activeName);
199
+ }
200
+ }
201
+ reactData.activeName = activeName;
202
+ },
203
+ clickEvent(evnt, item) {
204
+ const $xeTabs = this;
205
+ const props = $xeTabs;
206
+ const reactData = $xeTabs.reactData;
207
+ const { trigger } = props;
208
+ const beforeMethod = props.beforeChangeMethod || getConfig().tabs.beforeChangeMethod;
209
+ const { activeName } = reactData;
210
+ const { name } = item;
211
+ if (trigger === 'manual') {
212
+ $xeTabs.dispatchEvent('tab-click', { name }, evnt);
213
+ return;
214
+ }
215
+ const value = name;
216
+ reactData.activeName = name;
217
+ $xeTabs.$emit('input', value);
218
+ $xeTabs.dispatchEvent('tab-click', { name }, evnt);
219
+ $xeTabs.addInitName(name, evnt);
220
+ if (name !== activeName) {
221
+ if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name })) {
222
+ $xeTabs.dispatchEvent('change', { value, name, oldName: activeName, newName: name }, evnt);
223
+ }
224
+ else {
225
+ $xeTabs.dispatchEvent('tab-change-fail', { value, name, oldName: activeName, newName: name }, evnt);
226
+ }
227
+ }
228
+ },
229
+ handleCloseTabEvent(evnt, item, index, list) {
230
+ const $xeTabs = this;
231
+ const props = $xeTabs;
232
+ const reactData = $xeTabs.reactData;
233
+ evnt.stopPropagation();
234
+ const { activeName } = reactData;
235
+ const beforeMethod = props.beforeCloseMethod || getConfig().tabs.beforeCloseMethod;
236
+ const { name } = item;
237
+ const value = activeName;
238
+ let nextName = value;
239
+ if (activeName === name) {
240
+ const nextItem = index < list.length - 1 ? list[index + 1] : list[index - 1];
241
+ nextName = nextItem ? nextItem.name : null;
242
+ }
243
+ if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName })) {
244
+ $xeTabs.dispatchEvent('tab-close', { value, name, nextName }, evnt);
245
+ }
246
+ else {
247
+ $xeTabs.dispatchEvent('tab-close-fail', { value, name, nextName }, evnt);
248
+ }
249
+ },
250
+ startScrollAnimation(offsetPos, offsetSize) {
251
+ const $xeTabs = this;
252
+ const internalData = $xeTabs.internalData;
253
+ const { slTimeout } = internalData;
254
+ let offsetLeft = offsetSize;
255
+ let scrollCount = 6;
256
+ let delayNum = 35;
257
+ if (slTimeout) {
258
+ clearTimeout(slTimeout);
259
+ internalData.slTimeout = undefined;
260
+ }
261
+ const scrollAnimate = () => {
262
+ const headerWrapperEl = $xeTabs.$refs.refHeadWrapperElem;
263
+ if (scrollCount > 0) {
264
+ scrollCount--;
265
+ if (headerWrapperEl) {
266
+ const { clientWidth, scrollWidth, scrollLeft } = headerWrapperEl;
267
+ offsetLeft = Math.floor(offsetLeft / 2);
268
+ if (offsetPos > 0) {
269
+ if (clientWidth + scrollLeft < scrollWidth) {
270
+ headerWrapperEl.scrollLeft += offsetLeft;
271
+ delayNum -= 4;
272
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
273
+ }
274
+ }
275
+ else {
276
+ if (scrollLeft > 0) {
277
+ headerWrapperEl.scrollLeft -= offsetLeft;
278
+ delayNum -= 4;
279
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
280
+ }
281
+ }
282
+ $xeTabs.updateTabStyle();
283
+ }
284
+ }
285
+ };
286
+ scrollAnimate();
287
+ },
288
+ handleScrollToLeft(offsetPos) {
289
+ const $xeTabs = this;
290
+ const headerWrapperEl = $xeTabs.$refs.refHeadWrapperElem;
291
+ if (headerWrapperEl) {
292
+ const offsetSize = Math.floor(headerWrapperEl.clientWidth * 0.75);
293
+ $xeTabs.startScrollAnimation(offsetPos, offsetSize);
294
+ }
295
+ },
296
+ scrollLeftEvent() {
297
+ const $xeTabs = this;
298
+ $xeTabs.handleScrollToLeft(-1);
299
+ },
300
+ scrollRightEvent() {
301
+ const $xeTabs = this;
302
+ $xeTabs.handleScrollToLeft(1);
303
+ },
304
+ scrollToTab(name) {
305
+ const $xeTabs = this;
306
+ const tabOptions = $xeTabs.computeTabOptions;
307
+ const tabStaticOptions = $xeTabs.computeTabStaticOptions;
308
+ return $xeTabs.$nextTick().then(() => {
309
+ const headerWrapperEl = $xeTabs.$refs.refHeadWrapperElem;
310
+ if (headerWrapperEl) {
311
+ const index = XEUtils.findIndexOf(tabStaticOptions.length ? tabStaticOptions : tabOptions, item => item.name === name);
312
+ if (index > -1) {
313
+ const { scrollLeft, clientWidth, children } = headerWrapperEl;
314
+ const tabEl = children[index];
315
+ if (tabEl) {
316
+ const tabOffsetLeft = tabEl.offsetLeft;
317
+ const tabClientWidth = tabEl.clientWidth;
318
+ // 如果右侧被挡
319
+ const overSize = (tabOffsetLeft + tabClientWidth) - (scrollLeft + clientWidth);
320
+ if (overSize > 0) {
321
+ headerWrapperEl.scrollLeft += overSize;
322
+ }
323
+ // 如果左侧被挡,优先
324
+ if (tabOffsetLeft < scrollLeft) {
325
+ headerWrapperEl.scrollLeft = tabOffsetLeft;
326
+ }
327
+ }
328
+ }
329
+ $xeTabs.updateTabStyle();
330
+ }
331
+ });
332
+ },
333
+ handlePrevNext(isNext) {
334
+ const $xeTabs = this;
335
+ const reactData = $xeTabs.reactData;
336
+ const { activeName } = reactData;
337
+ const tabOptions = $xeTabs.computeTabOptions;
338
+ const tabStaticOptions = $xeTabs.computeTabStaticOptions;
339
+ const list = tabStaticOptions.length ? tabStaticOptions : tabOptions;
340
+ const index = XEUtils.findIndexOf(list, item => item.name === activeName);
341
+ if (index > -1) {
342
+ let item = null;
343
+ if (isNext) {
344
+ if (index < list.length - 1) {
345
+ item = list[index + 1];
346
+ }
347
+ }
348
+ else {
349
+ if (index > 0) {
350
+ item = list[index - 1];
351
+ }
352
+ }
353
+ if (item) {
354
+ const name = item.name;
355
+ const value = name;
356
+ reactData.activeName = name;
357
+ $xeTabs.$emit('input', value);
358
+ $xeTabs.addInitName(name, null);
359
+ }
360
+ }
361
+ return $xeTabs.$nextTick();
362
+ },
363
+ //
364
+ // Render
365
+ //
366
+ renderTabHeader(h, tabList) {
367
+ const $xeTabs = this;
368
+ const props = $xeTabs;
369
+ const slots = $xeTabs.$scopedSlots;
370
+ const reactData = $xeTabs.reactData;
371
+ const { type, titleWidth: allTitleWidth, titleAlign: allTitleAlign, showClose } = props;
372
+ const { activeName, lintLeft, lintWidth, isTabOver } = reactData;
373
+ const extraSlot = slots.extra;
374
+ return h('div', {
375
+ class: 'vxe-tabs-header'
376
+ }, [
377
+ isTabOver
378
+ ? h('div', {
379
+ class: 'vxe-tabs-header--bar vxe-tabs-header--left-bar',
380
+ on: {
381
+ click: $xeTabs.scrollLeftEvent
382
+ }
383
+ }, [
384
+ h('span', {
385
+ class: getIcon().TABS_TAB_BUTTON_LEFT
386
+ })
387
+ ])
388
+ : renderEmptyElement($xeTabs),
389
+ h('div', {
390
+ class: 'vxe-tabs-header--wrapper'
391
+ }, [
392
+ h('div', {
393
+ ref: 'refHeadWrapperElem',
394
+ class: 'vxe-tabs-header--item-wrapper'
395
+ }, tabList.map((item, index) => {
396
+ const { title, titleWidth, titleAlign, icon, name, slots } = item;
397
+ const tabSlot = slots ? slots.tab : null;
398
+ const itemWidth = titleWidth || allTitleWidth;
399
+ const itemAlign = titleAlign || allTitleAlign;
400
+ return h('div', {
401
+ key: `${name}`,
402
+ class: ['vxe-tabs-header--item', itemAlign ? `align--${itemAlign}` : '', {
403
+ 'is--active': activeName === name
404
+ }],
405
+ style: itemWidth
406
+ ? {
407
+ width: toCssUnit(itemWidth)
408
+ }
409
+ : {},
410
+ on: {
411
+ click(evnt) {
412
+ $xeTabs.clickEvent(evnt, item);
413
+ }
414
+ }
415
+ }, [
416
+ h('div', {
417
+ class: 'vxe-tabs-header--item-inner'
418
+ }, [
419
+ h('div', {
420
+ class: 'vxe-tabs-header--item-content'
421
+ }, [
422
+ icon
423
+ ? h('span', {
424
+ class: 'vxe-tabs-header--item-icon'
425
+ }, [
426
+ h('i', {
427
+ class: icon
428
+ })
429
+ ])
430
+ : renderEmptyElement($xeTabs),
431
+ h('span', {
432
+ class: 'vxe-tabs-header--item-name'
433
+ }, tabSlot ? $xeTabs.callSlot(tabSlot, { name, title }) : `${title}`)
434
+ ]),
435
+ showClose
436
+ ? h('div', {
437
+ class: 'vxe-tabs-header--close-btn',
438
+ on: {
439
+ click(evnt) {
440
+ $xeTabs.handleCloseTabEvent(evnt, item, index, tabList);
441
+ }
442
+ }
443
+ }, [
444
+ h('i', {
445
+ class: getIcon().TABS_TAB_CLOSE
446
+ })
447
+ ])
448
+ : renderEmptyElement($xeTabs)
449
+ ])
450
+ ]);
451
+ }).concat([
452
+ h('span', {
453
+ key: 'line',
454
+ class: `vxe-tabs-header--active-line type--${type || 'default'}`,
455
+ style: {
456
+ left: `${lintLeft}px`,
457
+ width: `${lintWidth}px`
458
+ }
459
+ })
460
+ ]))
461
+ ]),
462
+ isTabOver
463
+ ? h('div', {
464
+ class: 'vxe-tabs-header--bar vxe-tabs-header--right-bar',
465
+ on: {
466
+ click: $xeTabs.scrollRightEvent
467
+ }
468
+ }, [
469
+ h('span', {
470
+ class: getIcon().TABS_TAB_BUTTON_RIGHT
471
+ })
472
+ ])
473
+ : renderEmptyElement($xeTabs),
474
+ extraSlot
475
+ ? h('div', {
476
+ class: 'vxe-tabs-header--extra'
477
+ }, getSlotVNs(extraSlot({})))
478
+ : renderEmptyElement($xeTabs)
479
+ ]);
480
+ },
481
+ renderTabPane(h, item) {
482
+ const $xeTabs = this;
483
+ const reactData = $xeTabs.reactData;
484
+ const { initNames, activeName } = reactData;
485
+ const { name, slots } = item;
486
+ const defaultSlot = slots ? slots.default : null;
487
+ return name && initNames.includes(name)
488
+ ? h('div', {
489
+ key: name,
490
+ class: ['vxe-tabs-pane--item', {
491
+ 'is--visible': activeName === name,
492
+ 'has--content': !!defaultSlot
493
+ }]
494
+ }, defaultSlot ? $xeTabs.callSlot(defaultSlot, { name }) : [])
495
+ : renderEmptyElement($xeTabs);
496
+ },
497
+ renderTabContent(h, tabList) {
498
+ const $xeTabs = this;
499
+ const props = $xeTabs;
500
+ const reactData = $xeTabs.reactData;
501
+ const { destroyOnClose } = props;
502
+ const { activeName } = reactData;
503
+ const activeDefaultTab = tabList.find(item => item.name === activeName);
504
+ if (destroyOnClose) {
505
+ return [activeDefaultTab ? $xeTabs.renderTabPane(h, activeDefaultTab) : renderEmptyElement($xeTabs)];
506
+ }
507
+ return tabList.map((item) => $xeTabs.renderTabPane(h, item));
508
+ },
509
+ renderVN(h) {
510
+ const $xeTabs = this;
511
+ const props = $xeTabs;
512
+ const slots = $xeTabs.$scopedSlots;
513
+ const { type, height, padding, trigger } = props;
514
+ const tabOptions = $xeTabs.computeTabOptions;
515
+ const tabStaticOptions = $xeTabs.computeTabStaticOptions;
516
+ const defaultSlot = slots.default;
517
+ const tabList = defaultSlot ? tabStaticOptions : tabOptions;
518
+ return h('div', {
519
+ ref: 'refElem',
520
+ class: ['vxe-tabs', `vxe-tabs--${type || 'default'}`, `trigger--${trigger === 'manual' ? 'trigger' : 'default'}`, {
521
+ 'is--padding': padding,
522
+ 'is--height': height
523
+ }],
524
+ style: height
525
+ ? {
526
+ height: toCssUnit(height)
527
+ }
528
+ : {}
529
+ }, [
530
+ h('div', {
531
+ class: 'vxe-tabs-slots'
532
+ }, defaultSlot ? defaultSlot({}) : []),
533
+ $xeTabs.renderTabHeader(h, tabList),
534
+ h('div', {
535
+ class: 'vxe-tabs-pane'
536
+ }, $xeTabs.renderTabContent(h, tabList))
537
+ ]);
538
+ }
539
+ },
540
+ watch: {
541
+ value(val) {
542
+ const $xeTabs = this;
543
+ const reactData = $xeTabs.reactData;
544
+ $xeTabs.addInitName(val, null);
545
+ reactData.activeName = val;
546
+ },
547
+ 'reactData.activeName'(val) {
548
+ const $xeTabs = this;
549
+ const reactData = $xeTabs.reactData;
550
+ $xeTabs.scrollToTab(val);
551
+ $xeTabs.$nextTick(() => {
552
+ reactData.resizeFlag++;
553
+ });
554
+ },
555
+ options() {
556
+ const $xeTabs = this;
557
+ const props = $xeTabs;
558
+ $xeTabs.initDefaultName(props.options);
559
+ $xeTabs.updateTabStyle();
560
+ },
561
+ 'reactData.staticTabs'() {
562
+ const $xeTabs = this;
563
+ const reactData = $xeTabs.reactData;
564
+ $xeTabs.initDefaultName(reactData.staticTabs);
565
+ $xeTabs.updateTabStyle();
566
+ },
567
+ computeParentResizeFlag() {
568
+ const $xeTabs = this;
569
+ $xeTabs.$nextTick(() => {
570
+ $xeTabs.updateTabStyle();
571
+ });
572
+ }
573
+ },
574
+ created() {
575
+ const $xeTabs = this;
576
+ const props = $xeTabs;
577
+ const reactData = $xeTabs.reactData;
578
+ $xeTabs.addInitName(props.value, null);
579
+ $xeTabs.initDefaultName(reactData.staticTabs.length ? reactData.staticTabs : props.options);
580
+ },
581
+ mounted() {
582
+ const $xeTabs = this;
583
+ $xeTabs.updateTabStyle();
584
+ globalEvents.on($xeTabs, 'resize', $xeTabs.updateTabStyle);
585
+ },
586
+ beforeDestroy() {
587
+ const $xeTabs = this;
588
+ globalEvents.off($xeTabs, 'resize');
589
+ },
590
+ render(h) {
591
+ return this.renderVN(h);
592
+ }
593
+ });
@@ -0,0 +1,17 @@
1
+ import XEUtils from 'xe-utils';
2
+ export function assembleAnchorTab($xeTabs, elem, tabConfig) {
3
+ const staticLinks = $xeTabs.reactData.staticTabs;
4
+ const parentElem = elem.parentNode;
5
+ if (parentElem) {
6
+ staticLinks.splice(XEUtils.arrayIndexOf(parentElem.children, elem), 0, tabConfig);
7
+ $xeTabs.reactData.staticTabs = staticLinks.slice(0);
8
+ }
9
+ }
10
+ export function destroyAnchorTab($xeTabs, tabConfig) {
11
+ const staticTabs = $xeTabs.reactData.staticTabs;
12
+ const matchObj = XEUtils.findTree(staticTabs, item => item.id === tabConfig.id, { children: 'children' });
13
+ if (matchObj) {
14
+ matchObj.items.splice(matchObj.index, 1);
15
+ }
16
+ $xeTabs.reactData.staticTabs = staticTabs.slice(0);
17
+ }