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
@@ -94,6 +94,9 @@ export default defineVxeComponent({
94
94
  $xeModal: {
95
95
  default: null
96
96
  },
97
+ $xeDrawer: {
98
+ default: null
99
+ },
97
100
  $xeTable: {
98
101
  default: null
99
102
  },
@@ -0,0 +1,12 @@
1
+ import { VxeUI } from '@vxe-ui/core';
2
+ import VxeCarouselComponent from './src/carousel';
3
+ import { dynamicApp } from '../dynamics';
4
+ export const VxeCarousel = Object.assign({}, VxeCarouselComponent, {
5
+ install(app) {
6
+ app.component(VxeCarouselComponent.name, VxeCarouselComponent);
7
+ }
8
+ });
9
+ dynamicApp.use(VxeCarousel);
10
+ VxeUI.component(VxeCarouselComponent);
11
+ export const Carousel = VxeCarousel;
12
+ export default VxeCarousel;
@@ -0,0 +1,100 @@
1
+ import { defineVxeComponent } from '../../ui/src/comp';
2
+ import XEUtils from 'xe-utils';
3
+ import { globalMixins, createEvent } from '../../ui';
4
+ import { assembleCarouselItem, destroyCarouselItem } from './util';
5
+ export default defineVxeComponent({
6
+ name: 'VxeCarouselItem',
7
+ mixins: [
8
+ globalMixins.sizeMixin
9
+ ],
10
+ props: {
11
+ name: [String, Number],
12
+ className: String,
13
+ url: String
14
+ },
15
+ inject: {
16
+ $xeCarousel: {
17
+ default: null
18
+ }
19
+ },
20
+ data() {
21
+ const xID = XEUtils.uniqueId();
22
+ const reactData = {
23
+ currentDate: null
24
+ };
25
+ const itemConfig = {
26
+ id: xID,
27
+ name: '',
28
+ url: '',
29
+ className: '',
30
+ slots: {}
31
+ };
32
+ return {
33
+ xID,
34
+ reactData,
35
+ itemConfig
36
+ };
37
+ },
38
+ computed: Object.assign({}, {}),
39
+ methods: {
40
+ //
41
+ // Method
42
+ //
43
+ dispatchEvent(type, params, evnt) {
44
+ const $xeCarouselItem = this;
45
+ $xeCarouselItem.$emit(type, createEvent(evnt, { $carouselItem: $xeCarouselItem }, params));
46
+ },
47
+ //
48
+ // Render
49
+ //
50
+ renderVN(h) {
51
+ return h('div', {
52
+ ref: 'refElem'
53
+ });
54
+ }
55
+ },
56
+ watch: {
57
+ name(val) {
58
+ const $xeCarouselItem = this;
59
+ const itemConfig = $xeCarouselItem.itemConfig;
60
+ itemConfig.name = val;
61
+ },
62
+ url(val) {
63
+ const $xeCarouselItem = this;
64
+ const itemConfig = $xeCarouselItem.itemConfig;
65
+ itemConfig.url = val;
66
+ }
67
+ },
68
+ created() {
69
+ const $xeCarouselItem = this;
70
+ const props = $xeCarouselItem;
71
+ const slots = $xeCarouselItem.$scopedSlots;
72
+ const itemConfig = $xeCarouselItem.itemConfig;
73
+ Object.assign(itemConfig, {
74
+ name: props.name,
75
+ url: props.url,
76
+ className: props.className,
77
+ slots
78
+ });
79
+ },
80
+ mounted() {
81
+ const $xeCarouselItem = this;
82
+ const itemConfig = $xeCarouselItem.itemConfig;
83
+ const $xeCarousel = $xeCarouselItem.$xeCarousel;
84
+ const elem = $xeCarouselItem.$refs.refElem;
85
+ if ($xeCarousel && elem) {
86
+ assembleCarouselItem($xeCarousel, elem, itemConfig);
87
+ }
88
+ },
89
+ beforeDestroy() {
90
+ const $xeCarouselItem = this;
91
+ const itemConfig = $xeCarouselItem.itemConfig;
92
+ const $xeCarousel = $xeCarouselItem.$xeCarousel;
93
+ if ($xeCarousel) {
94
+ destroyCarouselItem($xeCarousel, itemConfig);
95
+ }
96
+ },
97
+ render(h) {
98
+ return this.renderVN(h);
99
+ }
100
+ });
@@ -0,0 +1,418 @@
1
+ import { defineVxeComponent } from '../../ui/src/comp';
2
+ import XEUtils from 'xe-utils';
3
+ import { getConfig, getIcon, createEvent, globalMixins, renderEmptyElement } from '../../ui';
4
+ import { getSlotVNs } from '../../ui/src/vn';
5
+ import { toCssUnit } from '../..//ui/src/dom';
6
+ import VxeLoadingComponent from '../../loading/src/loading';
7
+ export default defineVxeComponent({
8
+ name: 'VxeCarousel',
9
+ mixins: [
10
+ globalMixins.sizeMixin
11
+ ],
12
+ props: {
13
+ value: [String, Number],
14
+ options: Array,
15
+ loading: Boolean,
16
+ height: {
17
+ type: [Number, String],
18
+ default: () => getConfig().carousel.height
19
+ },
20
+ width: {
21
+ type: [Number, String],
22
+ default: () => getConfig().carousel.width
23
+ },
24
+ autoPlay: {
25
+ type: Boolean,
26
+ default: () => getConfig().carousel.autoPlay
27
+ },
28
+ interval: {
29
+ type: [Number, String],
30
+ default: () => getConfig().carousel.interval
31
+ },
32
+ loop: {
33
+ type: Boolean,
34
+ default: () => getConfig().carousel.loop
35
+ },
36
+ vertical: {
37
+ type: Boolean,
38
+ default: () => getConfig().carousel.vertical
39
+ },
40
+ showIndicators: {
41
+ type: Boolean,
42
+ default: () => getConfig().carousel.showIndicators
43
+ }
44
+ },
45
+ data() {
46
+ const xID = XEUtils.uniqueId();
47
+ const reactData = {
48
+ activeName: '',
49
+ staticItems: [],
50
+ itemWidth: 0,
51
+ itemHeight: 0
52
+ };
53
+ const internalData = {
54
+ apTimeout: undefined,
55
+ stopFlag: false
56
+ };
57
+ return {
58
+ xID,
59
+ reactData,
60
+ internalData
61
+ };
62
+ },
63
+ provide() {
64
+ const $xeCarousel = this;
65
+ return {
66
+ $xeCarousel
67
+ };
68
+ },
69
+ computed: Object.assign(Object.assign({}, {}), { computeListStyle() {
70
+ const $xeCarousel = this;
71
+ const props = $xeCarousel;
72
+ const reactData = $xeCarousel.reactData;
73
+ const { vertical, options } = props;
74
+ const { activeName, itemWidth, itemHeight, staticItems } = reactData;
75
+ const list = (staticItems && staticItems.length ? staticItems : options) || [];
76
+ const activeIndex = Math.max(0, XEUtils.findIndexOf(list, item => item.name === activeName));
77
+ const stys = {};
78
+ if (vertical) {
79
+ stys.transform = `translateY(-${activeIndex * itemHeight}px)`;
80
+ }
81
+ else {
82
+ stys.width = `${itemWidth * list.length}px`;
83
+ stys.transform = `translateX(-${activeIndex * itemWidth}px)`;
84
+ }
85
+ return stys;
86
+ } }),
87
+ methods: {
88
+ //
89
+ // Method
90
+ //
91
+ dispatchEvent(type, params, evnt) {
92
+ const $xeCarousel = this;
93
+ $xeCarousel.$emit(type, createEvent(evnt, { $carousel: $xeCarousel }, params));
94
+ },
95
+ prev() {
96
+ const $xeCarousel = this;
97
+ if ($xeCarousel.handlePrevNext(false)) {
98
+ $xeCarousel.handleAutoPlay();
99
+ }
100
+ return $xeCarousel.$nextTick();
101
+ },
102
+ next() {
103
+ const $xeCarousel = this;
104
+ if ($xeCarousel.handlePrevNext(true)) {
105
+ $xeCarousel.handleAutoPlay();
106
+ }
107
+ return $xeCarousel.$nextTick();
108
+ },
109
+ updateStyle() {
110
+ const $xeCarousel = this;
111
+ const reactData = $xeCarousel.reactData;
112
+ $xeCarousel.$nextTick(() => {
113
+ const wrapperElem = $xeCarousel.$refs.refWrapperElem;
114
+ if (wrapperElem) {
115
+ reactData.itemWidth = wrapperElem.clientWidth;
116
+ reactData.itemHeight = wrapperElem.clientHeight;
117
+ }
118
+ });
119
+ },
120
+ clickItemEvent(evnt, item) {
121
+ const $xeCarousel = this;
122
+ const reactData = $xeCarousel.reactData;
123
+ const value = item.name;
124
+ reactData.activeName = item.name;
125
+ $xeCarousel.$emit('input', value);
126
+ $xeCarousel.$emit('change', { value }, evnt);
127
+ $xeCarousel.updateStyle();
128
+ },
129
+ initDefaultActive(list) {
130
+ const $xeCarousel = this;
131
+ const props = $xeCarousel;
132
+ const reactData = $xeCarousel.reactData;
133
+ let activeName = null;
134
+ if (list && list.length) {
135
+ let validVal = false;
136
+ activeName = props.value;
137
+ list.forEach((item) => {
138
+ if (activeName === item.name) {
139
+ validVal = true;
140
+ }
141
+ });
142
+ if (!validVal) {
143
+ activeName = list[0].name;
144
+ $xeCarousel.$emit('input', activeName);
145
+ }
146
+ }
147
+ reactData.activeName = activeName;
148
+ },
149
+ handlePrevNext(isNext) {
150
+ const $xeCarousel = this;
151
+ const props = $xeCarousel;
152
+ const reactData = $xeCarousel.reactData;
153
+ const { options, loop } = props;
154
+ const { activeName, staticItems } = reactData;
155
+ const list = (staticItems && staticItems.length ? staticItems : options) || [];
156
+ const index = Math.max(0, XEUtils.findIndexOf(list, item => item.name === activeName));
157
+ if (index > -1) {
158
+ let item = null;
159
+ if (isNext) {
160
+ if (index < list.length - 1) {
161
+ item = list[index + 1];
162
+ }
163
+ else {
164
+ if (loop) {
165
+ item = list[0];
166
+ }
167
+ }
168
+ }
169
+ else {
170
+ if (index > 0) {
171
+ item = list[index - 1];
172
+ }
173
+ else {
174
+ if (loop) {
175
+ item = list[list.length - 1];
176
+ }
177
+ }
178
+ }
179
+ if (item) {
180
+ const name = item.name;
181
+ const value = name;
182
+ reactData.activeName = name;
183
+ $xeCarousel.$emit('input', value);
184
+ return true;
185
+ }
186
+ }
187
+ return false;
188
+ },
189
+ prevEvent(evnt) {
190
+ const $xeCarousel = this;
191
+ const reactData = $xeCarousel.reactData;
192
+ if ($xeCarousel.handlePrevNext(false)) {
193
+ const value = reactData.activeName;
194
+ $xeCarousel.$emit('change', { value }, evnt);
195
+ }
196
+ },
197
+ nextEvent(evnt) {
198
+ const $xeCarousel = this;
199
+ const reactData = $xeCarousel.reactData;
200
+ if ($xeCarousel.handlePrevNext(true)) {
201
+ const value = reactData.activeName;
202
+ $xeCarousel.$emit('change', { value }, evnt);
203
+ }
204
+ },
205
+ stopAutoPlay() {
206
+ const $xeCarousel = this;
207
+ const internalData = $xeCarousel.internalData;
208
+ const { apTimeout } = internalData;
209
+ internalData.stopFlag = true;
210
+ if (apTimeout) {
211
+ clearTimeout(apTimeout);
212
+ internalData.apTimeout = undefined;
213
+ }
214
+ },
215
+ handleAutoPlay() {
216
+ const $xeCarousel = this;
217
+ const props = $xeCarousel;
218
+ const internalData = $xeCarousel.internalData;
219
+ const { autoPlay, interval } = props;
220
+ const { stopFlag } = internalData;
221
+ $xeCarousel.stopAutoPlay();
222
+ if (autoPlay) {
223
+ internalData.stopFlag = false;
224
+ internalData.apTimeout = setTimeout(() => {
225
+ if (!stopFlag) {
226
+ $xeCarousel.handlePrevNext(true);
227
+ }
228
+ }, XEUtils.toNumber(interval) || 300);
229
+ }
230
+ },
231
+ mouseenterEvent() {
232
+ const $xeCarousel = this;
233
+ $xeCarousel.stopAutoPlay();
234
+ },
235
+ mouseleaveEvent() {
236
+ const $xeCarousel = this;
237
+ $xeCarousel.handleAutoPlay();
238
+ },
239
+ callSlot(slotFunc, params) {
240
+ const $xeCarousel = this;
241
+ const slots = $xeCarousel.$scopedSlots;
242
+ if (slotFunc) {
243
+ if (XEUtils.isString(slotFunc)) {
244
+ slotFunc = slots[slotFunc] || null;
245
+ }
246
+ if (XEUtils.isFunction(slotFunc)) {
247
+ return getSlotVNs(slotFunc(params));
248
+ }
249
+ }
250
+ return [];
251
+ },
252
+ //
253
+ // Render
254
+ //
255
+ renderItemWrapper(h, list) {
256
+ const $xeCarousel = this;
257
+ const props = $xeCarousel;
258
+ const reactData = $xeCarousel.reactData;
259
+ const { height } = props;
260
+ const { activeName } = reactData;
261
+ const listStyle = $xeCarousel.computeListStyle;
262
+ return h('div', {
263
+ class: 'vxe-carousel--list',
264
+ style: listStyle
265
+ }, list.map(item => {
266
+ const { name, url, slots } = item;
267
+ const defaultSlot = slots ? slots.default : null;
268
+ return h('div', {
269
+ key: `${name}`,
270
+ class: ['vxe-carousel--item-inner', {
271
+ 'is--active': activeName === name
272
+ }],
273
+ style: height
274
+ ? {
275
+ height: toCssUnit(height)
276
+ }
277
+ : {}
278
+ }, defaultSlot
279
+ ? $xeCarousel.callSlot(defaultSlot, {})
280
+ : [
281
+ h('img', {
282
+ class: 'vxe-carousel--item-img',
283
+ attrs: {
284
+ src: url
285
+ }
286
+ })
287
+ ]);
288
+ }));
289
+ },
290
+ renderIndicators(h, list) {
291
+ const $xeCarousel = this;
292
+ const reactData = $xeCarousel.reactData;
293
+ const { activeName } = reactData;
294
+ return h('div', {
295
+ class: 'vxe-carousel--indicators'
296
+ }, list.map((item) => {
297
+ const { name } = item;
298
+ return h('div', {
299
+ key: `${name}`,
300
+ class: ['vxe-carousel--indicators-item', {
301
+ 'is--active': activeName === name
302
+ }],
303
+ on: {
304
+ click(evnt) {
305
+ $xeCarousel.clickItemEvent(evnt, item);
306
+ }
307
+ }
308
+ });
309
+ }));
310
+ },
311
+ renderVN(h) {
312
+ const $xeCarousel = this;
313
+ const props = $xeCarousel;
314
+ const slots = $xeCarousel.$scopedSlots;
315
+ const reactData = $xeCarousel.reactData;
316
+ const { loading, height, width, showIndicators, vertical, options } = props;
317
+ const { staticItems } = reactData;
318
+ const defaultSlot = slots.default;
319
+ const list = (staticItems && staticItems.length ? staticItems : options) || [];
320
+ return h('div', {
321
+ ref: 'refElem',
322
+ class: ['vxe-carousel', `is--${vertical ? 'vertical' : 'horizontal'}`],
323
+ style: width
324
+ ? {
325
+ width: toCssUnit(width)
326
+ }
327
+ : {},
328
+ on: {
329
+ mouseenter: $xeCarousel.mouseenterEvent,
330
+ mouseleave: $xeCarousel.mouseleaveEvent
331
+ }
332
+ }, [
333
+ h('div', {
334
+ class: 'vxe-carousel--slots'
335
+ }, defaultSlot ? defaultSlot({}) : []),
336
+ h('div', {
337
+ ref: 'refWrapperElem',
338
+ class: 'vxe-carousel--item-wrapper',
339
+ style: height
340
+ ? {
341
+ height: toCssUnit(height)
342
+ }
343
+ : {}
344
+ }, [
345
+ $xeCarousel.renderItemWrapper(h, list)
346
+ ]),
347
+ showIndicators ? $xeCarousel.renderIndicators(h, list) : renderEmptyElement($xeCarousel),
348
+ h('div', {
349
+ class: 'vxe-carousel--btn-wrapper'
350
+ }, [
351
+ h('div', {
352
+ class: 'vxe-carousel--previous-btn',
353
+ on: {
354
+ click: $xeCarousel.prevEvent
355
+ }
356
+ }, [
357
+ h('i', {
358
+ class: vertical ? getIcon().CAROUSEL_VERTICAL_PREVIOUS : getIcon().CAROUSEL_HORIZONTAL_PREVIOUS
359
+ })
360
+ ]),
361
+ h('div', {
362
+ class: 'vxe-carousel--next-btn',
363
+ on: {
364
+ click: $xeCarousel.nextEvent
365
+ }
366
+ }, [
367
+ h('i', {
368
+ class: vertical ? getIcon().CAROUSEL_VERTICAL_NEXT : getIcon().CAROUSEL_HORIZONTAL_NEXT
369
+ })
370
+ ])
371
+ ]),
372
+ /**
373
+ * 加载中
374
+ */
375
+ h(VxeLoadingComponent, {
376
+ class: 'vxe-carousel--loading',
377
+ props: {
378
+ value: loading
379
+ }
380
+ })
381
+ ]);
382
+ }
383
+ },
384
+ watch: {
385
+ options() {
386
+ const $xeCarousel = this;
387
+ const props = $xeCarousel;
388
+ $xeCarousel.initDefaultActive(props.options);
389
+ },
390
+ 'reactData.staticItems'() {
391
+ const $xeCarousel = this;
392
+ const reactData = $xeCarousel.reactData;
393
+ $xeCarousel.initDefaultActive(reactData.staticItems);
394
+ },
395
+ autoPlay() {
396
+ const $xeCarousel = this;
397
+ $xeCarousel.handleAutoPlay();
398
+ }
399
+ },
400
+ created() {
401
+ const $xeCarousel = this;
402
+ const props = $xeCarousel;
403
+ const reactData = $xeCarousel.reactData;
404
+ $xeCarousel.initDefaultActive(reactData.staticItems.length ? reactData.staticItems : props.options);
405
+ },
406
+ mounted() {
407
+ const $xeCarousel = this;
408
+ $xeCarousel.handleAutoPlay();
409
+ $xeCarousel.updateStyle();
410
+ },
411
+ beforeDestroy() {
412
+ const $xeCarousel = this;
413
+ $xeCarousel.stopAutoPlay();
414
+ },
415
+ render(h) {
416
+ return this.renderVN(h);
417
+ }
418
+ });
@@ -0,0 +1,17 @@
1
+ import XEUtils from 'xe-utils';
2
+ export function assembleCarouselItem($xeCarousel, elem, itemConfig) {
3
+ const staticItems = $xeCarousel.reactData.staticItems;
4
+ const parentElem = elem.parentNode;
5
+ if (parentElem) {
6
+ staticItems.splice(XEUtils.arrayIndexOf(parentElem.children, elem), 0, itemConfig);
7
+ }
8
+ $xeCarousel.reactData.staticItems = staticItems.slice(0);
9
+ }
10
+ export function destroyCarouselItem($xeCarousel, itemConfig) {
11
+ const staticItems = $xeCarousel.reactData.staticItems;
12
+ const index = XEUtils.findIndexOf(staticItems, item => item.id === itemConfig.id);
13
+ if (index > -1) {
14
+ staticItems.splice(index, 1);
15
+ }
16
+ $xeCarousel.reactData.staticItems = staticItems.slice(0);
17
+ }