vxe-pc-ui 0.0.2 → 0.1.0

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 (714) hide show
  1. package/es/anchor/src/anchor.js +1 -1
  2. package/es/anchor-link/index.js +1 -1
  3. package/es/{button-group → button}/src/button-group.js +2 -2
  4. package/es/button/src/button.js +3 -3
  5. package/es/button/style.css +17 -17
  6. package/es/button/style.min.css +1 -1
  7. package/es/button-group/index.js +1 -1
  8. package/es/checkbox/index.js +10 -0
  9. package/es/checkbox/src/checkbox.js +116 -0
  10. package/es/checkbox/src/group.js +108 -0
  11. package/es/checkbox/style.css +107 -0
  12. package/es/checkbox/style.min.css +1 -0
  13. package/es/checkbox-group/index.js +10 -0
  14. package/es/col/index.js +1 -1
  15. package/es/components.js +98 -35
  16. package/es/dynamics/index.js +27 -0
  17. package/es/form/index.js +8 -0
  18. package/es/form/src/form-config-item.js +178 -0
  19. package/es/form/src/form-gather.js +47 -0
  20. package/es/form/src/form-item.js +228 -0
  21. package/es/form/src/form.js +665 -0
  22. package/es/form/src/itemInfo.js +39 -0
  23. package/es/form/src/render.js +68 -0
  24. package/es/form/src/util.js +65 -0
  25. package/es/form/style.css +321 -0
  26. package/es/form/style.min.css +1 -0
  27. package/es/form-design/index.js +8 -0
  28. package/es/form-design/src/form-design.js +79 -0
  29. package/es/form-design/src/setting.js +12 -0
  30. package/es/form-design/src/util.js +8 -0
  31. package/es/form-design/src/view.js +113 -0
  32. package/es/form-design/src/widget.js +104 -0
  33. package/es/form-design/style.css +97 -0
  34. package/es/form-design/style.min.css +1 -0
  35. package/es/form-gather/index.js +8 -0
  36. package/es/form-item/index.js +8 -0
  37. package/es/icon/style.css +540 -1
  38. package/es/icon/style.min.css +1 -1
  39. package/es/input/index.js +10 -0
  40. package/es/input/src/date.js +41 -0
  41. package/es/input/src/input.js +2333 -0
  42. package/es/input/src/number.js +10 -0
  43. package/es/input/style.css +1000 -0
  44. package/es/input/style.min.css +1 -0
  45. package/es/layout-aside/style.css +1 -0
  46. package/es/layout-aside/style.min.css +1 -1
  47. package/es/layout-body/style.css +1 -0
  48. package/es/layout-body/style.min.css +1 -1
  49. package/es/layout-footer/style.css +1 -0
  50. package/es/layout-footer/style.min.css +1 -1
  51. package/es/layout-header/style.css +1 -0
  52. package/es/layout-header/style.min.css +1 -1
  53. package/es/list-design/index.js +8 -0
  54. package/es/{design/src/design.js → list-design/src/list-design.js} +7 -7
  55. package/es/loading/index.js +8 -0
  56. package/es/loading/src/loading.js +53 -0
  57. package/es/loading/style.css +75 -0
  58. package/es/loading/style.min.css +1 -0
  59. package/es/modal/index.js +96 -0
  60. package/es/modal/src/modal.js +876 -0
  61. package/es/modal/style.css +323 -0
  62. package/es/modal/style.min.css +1 -0
  63. package/es/optgroup/index.js +10 -0
  64. package/es/optgroup/style.css +0 -0
  65. package/es/optgroup/style.min.css +0 -0
  66. package/es/option/index.js +10 -0
  67. package/es/option/style.css +0 -0
  68. package/es/option/style.min.css +0 -0
  69. package/es/pager/index.js +10 -0
  70. package/es/pager/src/pager.js +539 -0
  71. package/es/pager/style.css +319 -0
  72. package/es/pager/style.min.css +1 -0
  73. package/es/pulldown/index.js +10 -0
  74. package/es/pulldown/src/pulldown.js +328 -0
  75. package/es/pulldown/style.css +57 -0
  76. package/es/pulldown/style.min.css +1 -0
  77. package/es/radio/index.js +10 -0
  78. package/es/radio/src/button.js +113 -0
  79. package/es/radio/src/group.js +93 -0
  80. package/es/radio/src/radio.js +118 -0
  81. package/es/radio/style.css +143 -0
  82. package/es/radio/style.min.css +1 -0
  83. package/es/radio-button/index.js +10 -0
  84. package/es/radio-button/style.css +0 -0
  85. package/es/radio-button/style.min.css +0 -0
  86. package/es/radio-group/index.js +10 -0
  87. package/es/radio-group/style.css +0 -0
  88. package/es/radio-group/style.min.css +0 -0
  89. package/es/select/index.js +10 -0
  90. package/es/select/src/optgroup.js +31 -0
  91. package/es/select/src/option.js +31 -0
  92. package/es/select/src/optionInfo.js +16 -0
  93. package/es/select/src/select.js +992 -0
  94. package/es/select/src/util.js +36 -0
  95. package/es/select/style.css +201 -0
  96. package/es/select/style.min.css +1 -0
  97. package/es/style.css +1 -1
  98. package/es/style.min.css +1 -1
  99. package/es/switch/index.js +10 -0
  100. package/es/switch/src/switch.js +151 -0
  101. package/es/switch/style.css +97 -0
  102. package/es/switch/style.min.css +1 -0
  103. package/es/textarea/index.js +10 -0
  104. package/es/textarea/src/textarea.js +245 -0
  105. package/es/textarea/style.css +102 -0
  106. package/es/textarea/style.min.css +1 -0
  107. package/es/tooltip/index.js +8 -0
  108. package/es/tooltip/src/tooltip.js +336 -0
  109. package/es/tooltip/style.css +103 -0
  110. package/es/tooltip/style.min.css +1 -0
  111. package/es/ui/src/core.js +12 -2
  112. package/es/ui/src/dom.js +20 -0
  113. package/es/ui/src/globalStore.js +119 -4
  114. package/es/ui/src/i18n.js +7 -0
  115. package/es/ui/src/log.js +2 -2
  116. package/es/ui/src/renderer.js +67 -0
  117. package/es/ui/src/store.js +41 -0
  118. package/es/ui/src/utils.js +10 -0
  119. package/es/ui/src/validators.js +5 -0
  120. package/es/ui/src/vn.js +10 -0
  121. package/es/vxe-button/style.css +17 -17
  122. package/es/vxe-button/style.min.css +1 -1
  123. package/es/vxe-checkbox/index.js +3 -0
  124. package/es/vxe-checkbox/style.css +107 -0
  125. package/es/vxe-checkbox/style.min.css +1 -0
  126. package/es/vxe-checkbox-group/index.js +3 -0
  127. package/es/vxe-checkbox-group/style.css +0 -0
  128. package/es/vxe-checkbox-group/style.min.css +0 -0
  129. package/es/vxe-form/index.js +3 -0
  130. package/es/vxe-form/style.css +321 -0
  131. package/es/vxe-form/style.min.css +1 -0
  132. package/es/vxe-form-design/index.js +3 -0
  133. package/es/vxe-form-design/style.css +97 -0
  134. package/es/vxe-form-design/style.min.css +1 -0
  135. package/es/vxe-form-gather/index.js +3 -0
  136. package/es/vxe-form-gather/style.css +0 -0
  137. package/es/vxe-form-gather/style.min.css +0 -0
  138. package/es/vxe-form-item/index.js +3 -0
  139. package/es/vxe-form-item/style.css +0 -0
  140. package/es/vxe-form-item/style.min.css +0 -0
  141. package/es/vxe-icon/style.css +540 -1
  142. package/es/vxe-icon/style.min.css +1 -1
  143. package/es/vxe-input/index.js +3 -0
  144. package/es/vxe-input/style.css +1000 -0
  145. package/es/vxe-input/style.min.css +1 -0
  146. package/es/vxe-layout-aside/style.css +1 -0
  147. package/es/vxe-layout-aside/style.min.css +1 -1
  148. package/es/vxe-layout-body/style.css +1 -0
  149. package/es/vxe-layout-body/style.min.css +1 -1
  150. package/es/vxe-layout-footer/style.css +1 -0
  151. package/es/vxe-layout-footer/style.min.css +1 -1
  152. package/es/vxe-layout-header/style.css +1 -0
  153. package/es/vxe-layout-header/style.min.css +1 -1
  154. package/es/vxe-list-design/index.js +3 -0
  155. package/es/vxe-list-design/style.css +0 -0
  156. package/es/vxe-list-design/style.min.css +0 -0
  157. package/es/vxe-loading/index.js +3 -0
  158. package/es/vxe-loading/style.css +75 -0
  159. package/es/vxe-loading/style.min.css +1 -0
  160. package/es/vxe-modal/index.js +3 -0
  161. package/es/vxe-modal/style.css +323 -0
  162. package/es/vxe-modal/style.min.css +1 -0
  163. package/es/vxe-optgroup/index.js +3 -0
  164. package/es/vxe-optgroup/style.css +0 -0
  165. package/es/vxe-optgroup/style.min.css +0 -0
  166. package/es/vxe-option/index.js +3 -0
  167. package/es/vxe-option/style.css +0 -0
  168. package/es/vxe-option/style.min.css +0 -0
  169. package/es/vxe-pager/index.js +3 -0
  170. package/es/vxe-pager/style.css +319 -0
  171. package/es/vxe-pager/style.min.css +1 -0
  172. package/es/vxe-pulldown/index.js +3 -0
  173. package/es/vxe-pulldown/style.css +57 -0
  174. package/es/vxe-pulldown/style.min.css +1 -0
  175. package/es/vxe-radio/index.js +3 -0
  176. package/es/vxe-radio/style.css +143 -0
  177. package/es/vxe-radio/style.min.css +1 -0
  178. package/es/vxe-radio-button/index.js +3 -0
  179. package/es/vxe-radio-button/style.css +0 -0
  180. package/es/vxe-radio-button/style.min.css +0 -0
  181. package/es/vxe-radio-group/index.js +3 -0
  182. package/es/vxe-radio-group/style.css +0 -0
  183. package/es/vxe-radio-group/style.min.css +0 -0
  184. package/es/vxe-select/index.js +3 -0
  185. package/es/vxe-select/style.css +201 -0
  186. package/es/vxe-select/style.min.css +1 -0
  187. package/es/vxe-switch/index.js +3 -0
  188. package/es/vxe-switch/style.css +97 -0
  189. package/es/vxe-switch/style.min.css +1 -0
  190. package/es/vxe-textarea/index.js +3 -0
  191. package/es/vxe-textarea/style.css +102 -0
  192. package/es/vxe-textarea/style.min.css +1 -0
  193. package/es/vxe-tooltip/index.js +3 -0
  194. package/es/vxe-tooltip/style.css +103 -0
  195. package/es/vxe-tooltip/style.min.css +1 -0
  196. package/lib/anchor/src/anchor.js +1 -1
  197. package/lib/anchor/src/anchor.min.js +1 -1
  198. package/lib/anchor-link/index.js +1 -1
  199. package/lib/anchor-link/index.min.js +1 -1
  200. package/lib/{button-group → button}/src/button-group.js +2 -2
  201. package/lib/button/src/button-group.min.js +1 -0
  202. package/lib/button/src/button.js +3 -3
  203. package/lib/button/src/button.min.js +1 -1
  204. package/lib/button/style/style.css +17 -17
  205. package/lib/button/style/style.min.css +1 -1
  206. package/lib/button-group/index.js +1 -1
  207. package/lib/button-group/index.min.js +1 -1
  208. package/lib/checkbox/index.js +17 -0
  209. package/lib/checkbox/index.min.js +1 -0
  210. package/lib/checkbox/src/checkbox.js +144 -0
  211. package/lib/checkbox/src/checkbox.min.js +1 -0
  212. package/lib/checkbox/src/group.js +129 -0
  213. package/lib/checkbox/src/group.min.js +1 -0
  214. package/lib/checkbox/style/style.css +107 -0
  215. package/lib/checkbox/style/style.min.css +1 -0
  216. package/lib/checkbox-group/index.js +17 -0
  217. package/lib/checkbox-group/index.min.js +1 -0
  218. package/lib/checkbox-group/style/style.css +0 -0
  219. package/lib/checkbox-group/style/style.min.css +0 -0
  220. package/lib/col/index.js +1 -1
  221. package/lib/col/index.min.js +1 -1
  222. package/lib/components.js +290 -63
  223. package/lib/components.min.js +1 -1
  224. package/lib/dynamics/index.js +36 -0
  225. package/lib/dynamics/index.min.js +1 -0
  226. package/lib/form/index.js +15 -0
  227. package/lib/form/index.min.js +1 -0
  228. package/lib/form/src/form-config-item.js +192 -0
  229. package/lib/form/src/form-config-item.min.js +1 -0
  230. package/lib/form/src/form-gather.js +57 -0
  231. package/lib/form/src/form-gather.min.js +1 -0
  232. package/lib/form/src/form-item.js +247 -0
  233. package/lib/form/src/form-item.min.js +1 -0
  234. package/lib/form/src/form.js +768 -0
  235. package/lib/form/src/form.min.js +1 -0
  236. package/lib/form/src/itemInfo.js +47 -0
  237. package/lib/form/src/itemInfo.min.js +1 -0
  238. package/lib/form/src/render.js +84 -0
  239. package/lib/form/src/render.min.js +1 -0
  240. package/lib/form/src/util.js +108 -0
  241. package/lib/form/src/util.min.js +1 -0
  242. package/lib/form/style/index.js +1 -0
  243. package/lib/form/style/style.css +321 -0
  244. package/lib/form/style/style.min.css +1 -0
  245. package/lib/form-design/index.js +15 -0
  246. package/lib/form-design/index.min.js +1 -0
  247. package/lib/form-design/src/form-design.js +87 -0
  248. package/lib/form-design/src/form-design.min.js +1 -0
  249. package/lib/form-design/src/setting.js +18 -0
  250. package/lib/form-design/src/setting.min.js +1 -0
  251. package/lib/form-design/src/util.js +17 -0
  252. package/lib/form-design/src/util.min.js +1 -0
  253. package/lib/form-design/src/view.js +147 -0
  254. package/lib/form-design/src/view.min.js +1 -0
  255. package/lib/form-design/src/widget.js +114 -0
  256. package/lib/form-design/src/widget.min.js +1 -0
  257. package/lib/form-design/style/index.js +1 -0
  258. package/lib/form-design/style/style.css +97 -0
  259. package/lib/form-design/style/style.min.css +1 -0
  260. package/lib/form-gather/index.js +15 -0
  261. package/lib/form-gather/index.min.js +1 -0
  262. package/lib/form-gather/style/index.js +1 -0
  263. package/lib/form-gather/style/style.css +0 -0
  264. package/lib/form-gather/style/style.min.css +0 -0
  265. package/lib/form-item/index.js +15 -0
  266. package/lib/form-item/index.min.js +1 -0
  267. package/lib/form-item/style/index.js +1 -0
  268. package/lib/form-item/style/style.css +0 -0
  269. package/lib/form-item/style/style.min.css +0 -0
  270. package/lib/icon/style/style.css +540 -1
  271. package/lib/icon/style/style.min.css +1 -1
  272. package/lib/index.umd.js +10741 -782
  273. package/lib/index.umd.min.js +1 -1
  274. package/lib/input/index.js +17 -0
  275. package/lib/input/index.min.js +1 -0
  276. package/lib/input/src/date.js +46 -0
  277. package/lib/input/src/date.min.js +1 -0
  278. package/lib/input/src/input.js +2546 -0
  279. package/lib/input/src/input.min.js +1 -0
  280. package/lib/input/src/number.js +18 -0
  281. package/lib/input/src/number.min.js +1 -0
  282. package/lib/input/style/index.js +1 -0
  283. package/lib/input/style/style.css +1000 -0
  284. package/lib/input/style/style.min.css +1 -0
  285. package/lib/layout-aside/style/style.css +1 -0
  286. package/lib/layout-aside/style/style.min.css +1 -1
  287. package/lib/layout-body/style/style.css +1 -0
  288. package/lib/layout-body/style/style.min.css +1 -1
  289. package/lib/layout-footer/style/style.css +1 -0
  290. package/lib/layout-footer/style/style.min.css +1 -1
  291. package/lib/layout-header/style/style.css +1 -0
  292. package/lib/layout-header/style/style.min.css +1 -1
  293. package/lib/list-design/index.js +15 -0
  294. package/lib/list-design/index.min.js +1 -0
  295. package/lib/{design/src/design.js → list-design/src/list-design.js} +7 -7
  296. package/lib/list-design/src/list-design.min.js +1 -0
  297. package/lib/list-design/style/index.js +1 -0
  298. package/lib/list-design/style/style.css +0 -0
  299. package/lib/list-design/style/style.min.css +0 -0
  300. package/lib/loading/index.js +15 -0
  301. package/lib/loading/index.min.js +1 -0
  302. package/lib/loading/src/loading.js +49 -0
  303. package/lib/loading/src/loading.min.js +1 -0
  304. package/lib/loading/style/index.js +1 -0
  305. package/lib/loading/style/style.css +75 -0
  306. package/lib/loading/style/style.min.css +1 -0
  307. package/lib/modal/index.js +110 -0
  308. package/lib/modal/index.min.js +1 -0
  309. package/lib/modal/src/modal.js +1064 -0
  310. package/lib/modal/src/modal.min.js +1 -0
  311. package/lib/modal/style/index.js +1 -0
  312. package/lib/modal/style/style.css +323 -0
  313. package/lib/modal/style/style.min.css +1 -0
  314. package/lib/optgroup/index.js +17 -0
  315. package/lib/optgroup/index.min.js +1 -0
  316. package/lib/optgroup/style/index.js +1 -0
  317. package/lib/optgroup/style/style.css +0 -0
  318. package/lib/optgroup/style/style.min.css +0 -0
  319. package/lib/option/index.js +17 -0
  320. package/lib/option/index.min.js +1 -0
  321. package/lib/option/style/index.js +1 -0
  322. package/lib/option/style/style.css +0 -0
  323. package/lib/option/style/style.min.css +0 -0
  324. package/lib/pager/index.js +17 -0
  325. package/lib/pager/index.min.js +1 -0
  326. package/lib/pager/src/pager.js +593 -0
  327. package/lib/pager/src/pager.min.js +1 -0
  328. package/lib/pager/style/index.js +1 -0
  329. package/lib/pager/style/style.css +319 -0
  330. package/lib/pager/style/style.min.css +1 -0
  331. package/lib/pulldown/index.js +17 -0
  332. package/lib/pulldown/index.min.js +1 -0
  333. package/lib/pulldown/src/pulldown.js +359 -0
  334. package/lib/pulldown/src/pulldown.min.js +1 -0
  335. package/lib/pulldown/style/index.js +1 -0
  336. package/lib/pulldown/style/style.css +57 -0
  337. package/lib/pulldown/style/style.min.css +1 -0
  338. package/lib/radio/index.js +17 -0
  339. package/lib/radio/index.min.js +1 -0
  340. package/lib/radio/src/button.js +135 -0
  341. package/lib/radio/src/button.min.js +1 -0
  342. package/lib/radio/src/group.js +108 -0
  343. package/lib/radio/src/group.min.js +1 -0
  344. package/lib/radio/src/radio.js +139 -0
  345. package/lib/radio/src/radio.min.js +1 -0
  346. package/lib/radio/style/index.js +1 -0
  347. package/lib/radio/style/style.css +143 -0
  348. package/lib/radio/style/style.min.css +1 -0
  349. package/lib/radio-button/index.js +17 -0
  350. package/lib/radio-button/index.min.js +1 -0
  351. package/lib/radio-button/style/index.js +1 -0
  352. package/lib/radio-button/style/style.css +0 -0
  353. package/lib/radio-button/style/style.min.css +0 -0
  354. package/lib/radio-group/index.js +17 -0
  355. package/lib/radio-group/index.min.js +1 -0
  356. package/lib/radio-group/style/index.js +1 -0
  357. package/lib/radio-group/style/style.css +0 -0
  358. package/lib/radio-group/style/style.min.css +0 -0
  359. package/lib/select/index.js +17 -0
  360. package/lib/select/index.min.js +1 -0
  361. package/lib/select/src/optgroup.js +47 -0
  362. package/lib/select/src/optgroup.min.js +1 -0
  363. package/lib/select/src/option.js +45 -0
  364. package/lib/select/src/option.min.js +1 -0
  365. package/lib/select/src/optionInfo.js +24 -0
  366. package/lib/select/src/optionInfo.min.js +1 -0
  367. package/lib/select/src/select.js +1104 -0
  368. package/lib/select/src/select.min.js +1 -0
  369. package/lib/select/src/util.js +57 -0
  370. package/lib/select/src/util.min.js +1 -0
  371. package/lib/select/style/index.js +1 -0
  372. package/lib/select/style/style.css +201 -0
  373. package/lib/select/style/style.min.css +1 -0
  374. package/lib/style.css +1 -1
  375. package/lib/style.min.css +1 -1
  376. package/lib/switch/index.js +17 -0
  377. package/lib/switch/index.min.js +1 -0
  378. package/lib/switch/src/switch.js +161 -0
  379. package/lib/switch/src/switch.min.js +1 -0
  380. package/lib/switch/style/index.js +1 -0
  381. package/lib/switch/style/style.css +97 -0
  382. package/lib/switch/style/style.min.css +1 -0
  383. package/lib/textarea/index.js +17 -0
  384. package/lib/textarea/index.min.js +1 -0
  385. package/lib/textarea/src/textarea.js +298 -0
  386. package/lib/textarea/src/textarea.min.js +1 -0
  387. package/lib/textarea/style/index.js +1 -0
  388. package/lib/textarea/style/style.css +102 -0
  389. package/lib/textarea/style/style.min.css +1 -0
  390. package/lib/tooltip/index.js +15 -0
  391. package/lib/tooltip/index.min.js +1 -0
  392. package/lib/tooltip/src/tooltip.js +418 -0
  393. package/lib/tooltip/src/tooltip.min.js +1 -0
  394. package/lib/tooltip/style/index.js +1 -0
  395. package/lib/tooltip/style/style.css +103 -0
  396. package/lib/tooltip/style/style.min.css +1 -0
  397. package/lib/ui/src/core.js +49 -2
  398. package/lib/ui/src/core.min.js +1 -1
  399. package/lib/ui/src/dom.js +22 -0
  400. package/lib/ui/src/dom.min.js +1 -1
  401. package/lib/ui/src/globalStore.js +119 -4
  402. package/lib/ui/src/globalStore.min.js +1 -1
  403. package/lib/ui/src/i18n.js +14 -0
  404. package/lib/ui/src/i18n.min.js +1 -0
  405. package/lib/ui/src/log.js +2 -3
  406. package/lib/ui/src/log.min.js +1 -1
  407. package/lib/ui/src/renderer.js +77 -0
  408. package/lib/ui/src/renderer.min.js +1 -0
  409. package/lib/ui/src/store.js +49 -0
  410. package/lib/ui/src/store.min.js +1 -0
  411. package/lib/ui/src/utils.js +12 -0
  412. package/lib/ui/src/utils.min.js +1 -1
  413. package/lib/ui/src/validators.js +14 -0
  414. package/lib/ui/src/validators.min.js +1 -0
  415. package/lib/ui/src/vn.js +18 -0
  416. package/lib/ui/src/vn.min.js +1 -0
  417. package/lib/vxe-button/style/style.css +17 -17
  418. package/lib/vxe-button/style/style.min.css +1 -1
  419. package/lib/vxe-checkbox/index.js +22 -0
  420. package/lib/vxe-checkbox/index.min.js +1 -0
  421. package/lib/vxe-checkbox/style/index.js +1 -0
  422. package/lib/vxe-checkbox/style/style.css +107 -0
  423. package/lib/vxe-checkbox/style/style.min.css +1 -0
  424. package/lib/vxe-checkbox-group/index.js +22 -0
  425. package/lib/vxe-checkbox-group/index.min.js +1 -0
  426. package/lib/vxe-checkbox-group/style/index.js +1 -0
  427. package/lib/vxe-checkbox-group/style/style.css +0 -0
  428. package/lib/vxe-checkbox-group/style/style.min.css +0 -0
  429. package/lib/{vxe-design → vxe-form}/index.js +5 -5
  430. package/lib/vxe-form/index.min.js +1 -0
  431. package/lib/vxe-form/style/index.js +1 -0
  432. package/lib/vxe-form/style/style.css +321 -0
  433. package/lib/vxe-form/style/style.min.css +1 -0
  434. package/lib/vxe-form-design/index.js +22 -0
  435. package/lib/vxe-form-design/index.min.js +1 -0
  436. package/lib/vxe-form-design/style/index.js +1 -0
  437. package/lib/vxe-form-design/style/style.css +97 -0
  438. package/lib/vxe-form-design/style/style.min.css +1 -0
  439. package/lib/vxe-form-gather/index.js +22 -0
  440. package/lib/vxe-form-gather/index.min.js +1 -0
  441. package/lib/vxe-form-gather/style/index.js +1 -0
  442. package/lib/vxe-form-gather/style/style.css +0 -0
  443. package/lib/vxe-form-gather/style/style.min.css +0 -0
  444. package/lib/vxe-form-item/index.js +22 -0
  445. package/lib/vxe-form-item/index.min.js +1 -0
  446. package/lib/vxe-form-item/style/index.js +1 -0
  447. package/lib/vxe-form-item/style/style.css +0 -0
  448. package/lib/vxe-form-item/style/style.min.css +0 -0
  449. package/lib/vxe-icon/style/style.css +540 -1
  450. package/lib/vxe-icon/style/style.min.css +1 -1
  451. package/lib/vxe-input/index.js +22 -0
  452. package/lib/vxe-input/index.min.js +1 -0
  453. package/lib/vxe-input/style/index.js +1 -0
  454. package/lib/vxe-input/style/style.css +1000 -0
  455. package/lib/vxe-input/style/style.min.css +1 -0
  456. package/lib/vxe-layout-aside/style/style.css +1 -0
  457. package/lib/vxe-layout-aside/style/style.min.css +1 -1
  458. package/lib/vxe-layout-body/style/style.css +1 -0
  459. package/lib/vxe-layout-body/style/style.min.css +1 -1
  460. package/lib/vxe-layout-footer/style/style.css +1 -0
  461. package/lib/vxe-layout-footer/style/style.min.css +1 -1
  462. package/lib/vxe-layout-header/style/style.css +1 -0
  463. package/lib/vxe-layout-header/style/style.min.css +1 -1
  464. package/lib/vxe-list-design/index.js +22 -0
  465. package/lib/vxe-list-design/index.min.js +1 -0
  466. package/lib/vxe-list-design/style/index.js +1 -0
  467. package/lib/vxe-list-design/style/style.css +0 -0
  468. package/lib/vxe-list-design/style/style.min.css +0 -0
  469. package/lib/vxe-loading/index.js +22 -0
  470. package/lib/vxe-loading/index.min.js +1 -0
  471. package/lib/vxe-loading/style/index.js +1 -0
  472. package/lib/vxe-loading/style/style.css +75 -0
  473. package/lib/vxe-loading/style/style.min.css +1 -0
  474. package/lib/vxe-modal/index.js +22 -0
  475. package/lib/vxe-modal/index.min.js +1 -0
  476. package/lib/vxe-modal/style/index.js +1 -0
  477. package/lib/vxe-modal/style/style.css +323 -0
  478. package/lib/vxe-modal/style/style.min.css +1 -0
  479. package/lib/vxe-optgroup/index.js +22 -0
  480. package/lib/vxe-optgroup/index.min.js +1 -0
  481. package/lib/vxe-optgroup/style/index.js +1 -0
  482. package/lib/vxe-optgroup/style/style.css +0 -0
  483. package/lib/vxe-optgroup/style/style.min.css +0 -0
  484. package/lib/vxe-option/index.js +22 -0
  485. package/lib/vxe-option/index.min.js +1 -0
  486. package/lib/vxe-option/style/index.js +1 -0
  487. package/lib/vxe-option/style/style.css +0 -0
  488. package/lib/vxe-option/style/style.min.css +0 -0
  489. package/lib/vxe-pager/index.js +22 -0
  490. package/lib/vxe-pager/index.min.js +1 -0
  491. package/lib/vxe-pager/style/index.js +1 -0
  492. package/lib/vxe-pager/style/style.css +319 -0
  493. package/lib/vxe-pager/style/style.min.css +1 -0
  494. package/lib/vxe-pulldown/index.js +22 -0
  495. package/lib/vxe-pulldown/index.min.js +1 -0
  496. package/lib/vxe-pulldown/style/index.js +1 -0
  497. package/lib/vxe-pulldown/style/style.css +57 -0
  498. package/lib/vxe-pulldown/style/style.min.css +1 -0
  499. package/lib/vxe-radio/index.js +22 -0
  500. package/lib/vxe-radio/index.min.js +1 -0
  501. package/lib/vxe-radio/style/index.js +1 -0
  502. package/lib/vxe-radio/style/style.css +143 -0
  503. package/lib/vxe-radio/style/style.min.css +1 -0
  504. package/lib/vxe-radio-button/index.js +22 -0
  505. package/lib/vxe-radio-button/index.min.js +1 -0
  506. package/lib/vxe-radio-button/style/index.js +1 -0
  507. package/lib/vxe-radio-button/style/style.css +0 -0
  508. package/lib/vxe-radio-button/style/style.min.css +0 -0
  509. package/lib/vxe-radio-group/index.js +22 -0
  510. package/lib/vxe-radio-group/index.min.js +1 -0
  511. package/lib/vxe-radio-group/style/index.js +1 -0
  512. package/lib/vxe-radio-group/style/style.css +0 -0
  513. package/lib/vxe-radio-group/style/style.min.css +0 -0
  514. package/lib/vxe-select/index.js +22 -0
  515. package/lib/vxe-select/index.min.js +1 -0
  516. package/lib/vxe-select/style/index.js +1 -0
  517. package/lib/vxe-select/style/style.css +201 -0
  518. package/lib/vxe-select/style/style.min.css +1 -0
  519. package/lib/vxe-switch/index.js +22 -0
  520. package/lib/vxe-switch/index.min.js +1 -0
  521. package/lib/vxe-switch/style/index.js +1 -0
  522. package/lib/vxe-switch/style/style.css +97 -0
  523. package/lib/vxe-switch/style/style.min.css +1 -0
  524. package/lib/vxe-textarea/index.js +22 -0
  525. package/lib/vxe-textarea/index.min.js +1 -0
  526. package/lib/vxe-textarea/style/index.js +1 -0
  527. package/lib/vxe-textarea/style/style.css +102 -0
  528. package/lib/vxe-textarea/style/style.min.css +1 -0
  529. package/lib/vxe-tooltip/index.js +22 -0
  530. package/lib/vxe-tooltip/index.min.js +1 -0
  531. package/lib/vxe-tooltip/style/index.js +1 -0
  532. package/lib/vxe-tooltip/style/style.css +103 -0
  533. package/lib/vxe-tooltip/style/style.min.css +1 -0
  534. package/package.json +1 -1
  535. package/packages/anchor/src/anchor.ts +1 -1
  536. package/packages/anchor-link/index.ts +1 -1
  537. package/packages/{button-group → button}/src/button-group.ts +2 -2
  538. package/packages/button/src/button.ts +3 -3
  539. package/packages/button-group/index.ts +1 -1
  540. package/packages/checkbox/index.ts +15 -0
  541. package/packages/checkbox/src/checkbox.ts +131 -0
  542. package/packages/checkbox/src/group.ts +127 -0
  543. package/packages/checkbox-group/index.ts +15 -0
  544. package/packages/col/index.ts +1 -1
  545. package/packages/components.ts +100 -35
  546. package/packages/dynamics/index.ts +34 -0
  547. package/packages/form/index.ts +11 -0
  548. package/packages/form/src/form-config-item.ts +193 -0
  549. package/packages/form/src/form-gather.ts +60 -0
  550. package/packages/form/src/form-item.ts +253 -0
  551. package/packages/form/src/form.ts +716 -0
  552. package/packages/form/src/itemInfo.ts +43 -0
  553. package/packages/form/src/render.ts +83 -0
  554. package/packages/form/src/util.ts +79 -0
  555. package/packages/form-design/index.ts +11 -0
  556. package/packages/form-design/src/form-design.ts +99 -0
  557. package/packages/form-design/src/setting.ts +13 -0
  558. package/packages/form-design/src/util.ts +10 -0
  559. package/packages/form-design/src/view.ts +125 -0
  560. package/packages/form-design/src/widget.ts +117 -0
  561. package/packages/form-gather/index.ts +11 -0
  562. package/packages/form-item/index.ts +11 -0
  563. package/packages/icon/src/icon.ts +1 -1
  564. package/packages/input/index.ts +15 -0
  565. package/packages/input/src/date.ts +42 -0
  566. package/packages/input/src/input.ts +2480 -0
  567. package/packages/input/src/number.ts +12 -0
  568. package/packages/list-design/index.ts +11 -0
  569. package/packages/list-design/src/list-design.ts +55 -0
  570. package/packages/loading/index.ts +11 -0
  571. package/packages/loading/src/loading.ts +56 -0
  572. package/packages/modal/index.ts +110 -0
  573. package/packages/modal/src/modal.ts +950 -0
  574. package/packages/optgroup/index.ts +15 -0
  575. package/packages/option/index.ts +15 -0
  576. package/packages/pager/index.ts +15 -0
  577. package/packages/pager/src/pager.ts +595 -0
  578. package/packages/pulldown/index.ts +15 -0
  579. package/packages/pulldown/src/pulldown.ts +349 -0
  580. package/packages/radio/index.ts +15 -0
  581. package/packages/radio/src/button.ts +132 -0
  582. package/packages/radio/src/group.ts +110 -0
  583. package/packages/radio/src/radio.ts +137 -0
  584. package/packages/radio-button/index.ts +15 -0
  585. package/packages/radio-group/index.ts +15 -0
  586. package/packages/select/index.ts +15 -0
  587. package/packages/select/src/optgroup.ts +39 -0
  588. package/packages/select/src/option.ts +38 -0
  589. package/packages/select/src/optionInfo.ts +20 -0
  590. package/packages/select/src/select.ts +1034 -0
  591. package/packages/select/src/util.ts +47 -0
  592. package/packages/switch/index.ts +15 -0
  593. package/packages/switch/src/switch.ts +171 -0
  594. package/packages/textarea/index.ts +15 -0
  595. package/packages/textarea/src/textarea.ts +273 -0
  596. package/packages/tooltip/index.ts +11 -0
  597. package/packages/tooltip/src/tooltip.ts +360 -0
  598. package/packages/ui/src/core.ts +13 -1
  599. package/packages/ui/src/dom.ts +23 -0
  600. package/packages/ui/src/globalStore.ts +122 -5
  601. package/packages/ui/src/i18n.ts +8 -0
  602. package/packages/ui/src/log.ts +2 -2
  603. package/packages/ui/src/renderer.ts +71 -0
  604. package/packages/ui/src/store.ts +49 -0
  605. package/packages/ui/src/utils.ts +12 -0
  606. package/packages/ui/src/validators.ts +9 -0
  607. package/packages/ui/src/vn.ts +14 -0
  608. package/styles/all.scss +30 -10
  609. package/styles/base/common.scss +13 -0
  610. package/styles/components/button.scss +8 -8
  611. package/styles/components/checkbox-group.scss +0 -0
  612. package/styles/components/checkbox.scss +91 -0
  613. package/styles/components/form-design.scss +93 -0
  614. package/styles/components/form-gather.scss +0 -0
  615. package/styles/components/form-item.scss +0 -0
  616. package/styles/components/form.scss +339 -0
  617. package/styles/components/icon.scss +3 -1
  618. package/styles/components/input.scss +911 -0
  619. package/styles/components/layout-aside.scss +1 -0
  620. package/styles/components/layout-body.scss +1 -0
  621. package/styles/components/layout-footer.scss +1 -0
  622. package/styles/components/layout-header.scss +1 -0
  623. package/styles/components/list-design.scss +0 -0
  624. package/styles/components/list.scss +26 -0
  625. package/styles/components/loading.scss +84 -0
  626. package/styles/components/modal.scss +383 -0
  627. package/styles/components/old-icon.scss +712 -0
  628. package/styles/components/optgroup.scss +0 -0
  629. package/styles/components/option.scss +0 -0
  630. package/styles/components/pager.scss +287 -0
  631. package/styles/components/pulldown.scss +55 -0
  632. package/styles/components/radio-button.scss +0 -0
  633. package/styles/components/radio-group.scss +0 -0
  634. package/styles/components/radio.scss +149 -0
  635. package/styles/components/select.scss +226 -0
  636. package/styles/components/switch.scss +113 -0
  637. package/styles/components/textarea.scss +102 -0
  638. package/styles/components/tooltip.scss +124 -0
  639. package/styles/helpers/mixin.scss +12 -12
  640. package/styles/theme/base.scss +143 -6
  641. package/types/all.d.ts +66 -33
  642. package/types/{component → components}/anchor-link.d.ts +17 -2
  643. package/types/{component → components}/anchor.d.ts +10 -2
  644. package/types/{component → components}/breadcrumb-item.d.ts +12 -1
  645. package/types/{component → components}/breadcrumb.d.ts +10 -2
  646. package/types/{component → components}/button-group.d.ts +11 -3
  647. package/types/{component → components}/button.d.ts +14 -3
  648. package/types/components/checkbox-group.d.ts +112 -0
  649. package/types/components/checkbox.d.ts +119 -0
  650. package/types/{component → components}/col.d.ts +9 -1
  651. package/types/components/form-design.d.ts +88 -0
  652. package/types/components/form-gather.d.ts +75 -0
  653. package/types/components/form-item.d.ts +231 -0
  654. package/types/components/form.d.ts +349 -0
  655. package/types/{component → components}/icon.d.ts +7 -2
  656. package/types/components/input.d.ts +375 -0
  657. package/types/{component → components}/layout-aside.d.ts +10 -2
  658. package/types/{component → components}/layout-body.d.ts +10 -2
  659. package/types/{component → components}/layout-container.d.ts +10 -2
  660. package/types/{component → components}/layout-footer.d.ts +10 -2
  661. package/types/{component → components}/layout-header.d.ts +7 -1
  662. package/types/components/list-design.d.ts +67 -0
  663. package/types/components/loading.d.ts +66 -0
  664. package/types/components/modal.d.ts +381 -0
  665. package/types/components/optgroup.d.ts +80 -0
  666. package/types/components/option.d.ts +99 -0
  667. package/types/components/pager.d.ts +208 -0
  668. package/types/components/pulldown.d.ts +134 -0
  669. package/types/components/radio-button.d.ts +99 -0
  670. package/types/components/radio-group.d.ts +107 -0
  671. package/types/components/radio.d.ts +119 -0
  672. package/types/{component → components}/row.d.ts +10 -2
  673. package/types/components/select.d.ts +274 -0
  674. package/types/components/switch.d.ts +118 -0
  675. package/types/components/textarea.d.ts +212 -0
  676. package/types/components/tooltip.d.ts +122 -0
  677. package/types/ui/global-config.d.ts +43 -6
  678. package/types/ui/global-icon.d.ts +80 -10
  679. package/types/ui/index.d.ts +25 -2
  680. package/types/ui/renderer.d.ts +239 -0
  681. package/types/ui/validators.d.ts +26 -0
  682. package/es/design/index.js +0 -8
  683. package/es/vxe-design/index.js +0 -3
  684. package/lib/button-group/src/button-group.min.js +0 -1
  685. package/lib/design/index.js +0 -15
  686. package/lib/design/index.min.js +0 -1
  687. package/lib/design/src/design.min.js +0 -1
  688. package/lib/vxe-design/index.min.js +0 -1
  689. package/packages/design/index.ts +0 -11
  690. package/packages/design/src/design.ts +0 -55
  691. package/styles/components/design.scss +0 -1
  692. package/types/component/design.d.ts +0 -63
  693. /package/es/{anchor-link → anchor}/src/anchor-link.js +0 -0
  694. /package/es/{anchor-link → anchor}/src/util.js +0 -0
  695. /package/es/{design → checkbox-group}/style.css +0 -0
  696. /package/es/{design → checkbox-group}/style.min.css +0 -0
  697. /package/es/{vxe-design → form-gather}/style.css +0 -0
  698. /package/es/{vxe-design → form-gather}/style.min.css +0 -0
  699. /package/{lib/design/style → es/form-item}/style.css +0 -0
  700. /package/{lib/design/style → es/form-item}/style.min.css +0 -0
  701. /package/{lib/vxe-design/style → es/list-design}/style.css +0 -0
  702. /package/{lib/vxe-design/style → es/list-design}/style.min.css +0 -0
  703. /package/es/{col → row}/src/col.js +0 -0
  704. /package/lib/{anchor-link → anchor}/src/anchor-link.js +0 -0
  705. /package/lib/{anchor-link → anchor}/src/anchor-link.min.js +0 -0
  706. /package/lib/{anchor-link → anchor}/src/util.js +0 -0
  707. /package/lib/{anchor-link → anchor}/src/util.min.js +0 -0
  708. /package/lib/{vxe-design → checkbox}/style/index.js +0 -0
  709. /package/lib/{design → checkbox-group}/style/index.js +0 -0
  710. /package/lib/{col → row}/src/col.js +0 -0
  711. /package/lib/{col → row}/src/col.min.js +0 -0
  712. /package/packages/{anchor-link → anchor}/src/anchor-link.ts +0 -0
  713. /package/packages/{anchor-link → anchor}/src/util.ts +0 -0
  714. /package/packages/{col → row}/src/col.ts +0 -0
@@ -0,0 +1,1034 @@
1
+ import { defineComponent, h, Teleport, PropType, ref, Ref, inject, computed, provide, onUnmounted, reactive, nextTick, watch, onMounted, createCommentVNode } from 'vue'
2
+ import XEUtils from 'xe-utils'
3
+ import globalConfigStore from '../../ui/src/globalStore'
4
+ import iconConfigStore from '../../ui/src/iconStore'
5
+ import { useSize } from '../../hooks/size'
6
+ import { getEventTargetNode, getAbsolutePos } from '../../ui/src/dom'
7
+ import { getLastZIndex, nextZIndex, getFuncText, formatText } from '../../ui/src/utils'
8
+ import { GlobalEvent, hasEventKey, EVENT_KEYS } from '../../ui/src/event'
9
+ import { getI18n } from '../../ui/src/i18n'
10
+ import VxeInputComponent from '../../input/src/input'
11
+ import { getSlotVNs } from '../../ui/src/vn'
12
+
13
+ import { VxeSelectPropTypes, VxeSelectConstructor, SelectReactData, VxeSelectEmits, VxeInputConstructor, SelectMethods, SelectPrivateRef, VxeSelectMethods, VxeOptgroupProps, VxeOptionProps, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeInputDefines, VxeComponentSlot } from '../../../types'
14
+
15
+ function isOptionVisible (option: any) {
16
+ return option.visible !== false
17
+ }
18
+
19
+ function getOptUniqueId () {
20
+ return XEUtils.uniqueId('opt_')
21
+ }
22
+
23
+ export default defineComponent({
24
+ name: 'VxeSelect',
25
+ props: {
26
+ modelValue: null,
27
+ clearable: Boolean as PropType<VxeSelectPropTypes.Clearable>,
28
+ placeholder: {
29
+ type: String as PropType<VxeSelectPropTypes.Placeholder>,
30
+ default: () => XEUtils.eqNull(globalConfigStore.select.placeholder) ? getI18n('vxe.base.pleaseSelect') : globalConfigStore.select.placeholder
31
+ },
32
+ loading: Boolean as PropType<VxeSelectPropTypes.Loading>,
33
+ disabled: Boolean as PropType<VxeSelectPropTypes.Disabled>,
34
+ multiple: Boolean as PropType<VxeSelectPropTypes.Multiple>,
35
+ multiCharOverflow: { type: [Number, String] as PropType<VxeSelectPropTypes.MultiCharOverflow>, default: () => globalConfigStore.select.multiCharOverflow },
36
+ prefixIcon: String as PropType<VxeSelectPropTypes.PrefixIcon>,
37
+ placement: String as PropType<VxeSelectPropTypes.Placement>,
38
+ options: Array as PropType<VxeSelectPropTypes.Options>,
39
+ optionProps: Object as PropType<VxeSelectPropTypes.OptionProps>,
40
+ optionGroups: Array as PropType<VxeSelectPropTypes.OptionGroups>,
41
+ optionGroupProps: Object as PropType<VxeSelectPropTypes.OptionGroupProps>,
42
+ optionConfig: Object as PropType<VxeSelectPropTypes.OptionConfig>,
43
+ className: [String, Function] as PropType<VxeSelectPropTypes.ClassName>,
44
+ popupClassName: [String, Function] as PropType<VxeSelectPropTypes.PopupClassName>,
45
+ max: { type: [String, Number] as PropType<VxeSelectPropTypes.Max>, default: null },
46
+ size: { type: String as PropType<VxeSelectPropTypes.Size>, default: () => globalConfigStore.select.size || globalConfigStore.size },
47
+ filterable: Boolean as PropType<VxeSelectPropTypes.Filterable>,
48
+ filterMethod: Function as PropType<VxeSelectPropTypes.FilterMethod>,
49
+ remote: Boolean as PropType<VxeSelectPropTypes.Remote>,
50
+ remoteMethod: Function as PropType<VxeSelectPropTypes.RemoteMethod>,
51
+ emptyText: String as PropType<VxeSelectPropTypes.EmptyText>,
52
+ // 已废弃,被 option-config.keyField 替换
53
+ optionId: { type: String as PropType<VxeSelectPropTypes.OptionId>, default: () => globalConfigStore.select.optionId },
54
+ // 已废弃,被 option-config.useKey 替换
55
+ optionKey: Boolean as PropType<VxeSelectPropTypes.OptionKey>,
56
+ transfer: { type: Boolean as PropType<VxeSelectPropTypes.Transfer>, default: () => globalConfigStore.select.transfer }
57
+ },
58
+ emits: [
59
+ 'update:modelValue',
60
+ 'change',
61
+ 'clear',
62
+ 'blur',
63
+ 'focus'
64
+ ] as VxeSelectEmits,
65
+ setup (props, context) {
66
+ const { slots, emit } = context
67
+ const $xeform = inject<VxeFormConstructor & VxeFormPrivateMethods | null>('$xeForm', null)
68
+ const $xeformiteminfo = inject<VxeFormDefines.ProvideItemInfo | null>('$xeFormItemInfo', null)
69
+
70
+ const xID = XEUtils.uniqueId()
71
+
72
+ const computeSize = useSize(props)
73
+
74
+ const reactData = reactive<SelectReactData>({
75
+ inited: false,
76
+ staticOptions: [],
77
+ fullGroupList: [],
78
+ fullOptionList: [],
79
+ visibleGroupList: [],
80
+ visibleOptionList: [],
81
+ remoteValueList: [],
82
+ panelIndex: 0,
83
+ panelStyle: {},
84
+ panelPlacement: null,
85
+ currentOption: null,
86
+ currentValue: null,
87
+ visiblePanel: false,
88
+ animatVisible: false,
89
+ isActivated: false,
90
+ searchValue: '',
91
+ searchLoading: false
92
+ })
93
+
94
+ const refElem = ref() as Ref<HTMLDivElement>
95
+ const refInput = ref() as Ref<VxeInputConstructor>
96
+ const refInpSearch = ref() as Ref<VxeInputConstructor>
97
+ const refOptionWrapper = ref() as Ref<HTMLDivElement>
98
+ const refOptionPanel = ref() as Ref<HTMLDivElement>
99
+
100
+ const refMaps: SelectPrivateRef = {
101
+ refElem
102
+ }
103
+
104
+ const $xeselect = {
105
+ xID,
106
+ props,
107
+ context,
108
+ reactData,
109
+ getRefMaps: () => refMaps
110
+ } as unknown as VxeSelectConstructor & VxeSelectMethods
111
+
112
+ let selectMethods = {} as SelectMethods
113
+
114
+ const computePropsOpts = computed(() => {
115
+ return props.optionProps || {}
116
+ })
117
+
118
+ const computeGroupPropsOpts = computed(() => {
119
+ return props.optionGroupProps || {}
120
+ })
121
+
122
+ const computeLabelField = computed(() => {
123
+ const propsOpts = computePropsOpts.value
124
+ return propsOpts.label || 'label'
125
+ })
126
+
127
+ const computeValueField = computed(() => {
128
+ const propsOpts = computePropsOpts.value
129
+ return propsOpts.value || 'value'
130
+ })
131
+
132
+ const computeGroupLabelField = computed(() => {
133
+ const groupPropsOpts = computeGroupPropsOpts.value
134
+ return groupPropsOpts.label || 'label'
135
+ })
136
+
137
+ const computeGroupOptionsField = computed(() => {
138
+ const groupPropsOpts = computeGroupPropsOpts.value
139
+ return groupPropsOpts.options || 'options'
140
+ })
141
+
142
+ const computeIsMaximize = computed(() => {
143
+ const { modelValue, multiple, max } = props
144
+ if (multiple && max) {
145
+ return (modelValue ? modelValue.length : 0) >= XEUtils.toNumber(max)
146
+ }
147
+ return false
148
+ })
149
+
150
+ const computeOptionOpts = computed(() => {
151
+ return Object.assign({}, globalConfigStore.select.optionConfig, props.optionConfig)
152
+ })
153
+
154
+ const computeIsGroup = computed(() => {
155
+ return reactData.fullGroupList.some((item) => item.options && item.options.length)
156
+ })
157
+
158
+ const computeMultiMaxCharNum = computed(() => {
159
+ return XEUtils.toNumber(props.multiCharOverflow)
160
+ })
161
+
162
+ const callSlot = <T>(slotFunc: ((params: T) => VxeComponentSlot | VxeComponentSlot[]) | string | null, params: T) => {
163
+ if (slotFunc) {
164
+ if (XEUtils.isString(slotFunc)) {
165
+ slotFunc = slots[slotFunc] || null
166
+ }
167
+ if (XEUtils.isFunction(slotFunc)) {
168
+ return getSlotVNs(slotFunc(params))
169
+ }
170
+ }
171
+ return []
172
+ }
173
+
174
+ const findOption = (optionValue: any) => {
175
+ const { fullOptionList, fullGroupList } = reactData
176
+ const isGroup = computeIsGroup.value
177
+ const valueField = computeValueField.value as 'value'
178
+ if (isGroup) {
179
+ for (let gIndex = 0; gIndex < fullGroupList.length; gIndex++) {
180
+ const group = fullGroupList[gIndex]
181
+ if (group.options) {
182
+ for (let index = 0; index < group.options.length; index++) {
183
+ const option = group.options[index]
184
+ if (optionValue === option[valueField]) {
185
+ return option
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
191
+ return fullOptionList.find((item) => optionValue === item[valueField])
192
+ }
193
+
194
+ const getRemoteSelectLabel = (value: any) => {
195
+ const { remoteValueList } = reactData
196
+ const labelField = computeLabelField.value
197
+ const remoteItem = remoteValueList.find(item => value === item.key)
198
+ const item = remoteItem ? remoteItem.result : null
199
+ return XEUtils.toValueString(item ? item[labelField] : value)
200
+ }
201
+
202
+ const getSelectLabel = (value: any) => {
203
+ const labelField = computeLabelField.value
204
+ const item = findOption(value)
205
+ return XEUtils.toValueString(item ? item[labelField as 'label'] : value)
206
+ }
207
+
208
+ const computeSelectLabel = computed(() => {
209
+ const { modelValue, multiple, remote } = props
210
+ const multiMaxCharNum = computeMultiMaxCharNum.value
211
+ if (modelValue && multiple) {
212
+ const vals = XEUtils.isArray(modelValue) ? modelValue : [modelValue]
213
+ if (remote) {
214
+ return vals.map(val => getRemoteSelectLabel(val)).join(', ')
215
+ }
216
+ return vals.map((val) => {
217
+ const label = getSelectLabel(val)
218
+ if (multiMaxCharNum > 0 && label.length > multiMaxCharNum) {
219
+ return `${label.substring(0, multiMaxCharNum)}...`
220
+ }
221
+ return label
222
+ }).join(', ')
223
+ }
224
+ if (remote) {
225
+ return getRemoteSelectLabel(modelValue)
226
+ }
227
+ return getSelectLabel(modelValue)
228
+ })
229
+
230
+ const getOptkey = () => {
231
+ const optionOpts = computeOptionOpts.value
232
+ return optionOpts.keyField || props.optionId || '_X_OPTION_KEY'
233
+ }
234
+
235
+ const getOptid = (option: any) => {
236
+ const optid = option[getOptkey()]
237
+ return optid ? encodeURIComponent(optid) : ''
238
+ }
239
+
240
+ /**
241
+ * 刷新选项,当选项被动态显示/隐藏时可能会用到
242
+ */
243
+ const refreshOption = () => {
244
+ const { filterable, filterMethod } = props
245
+ const { fullOptionList, fullGroupList, searchValue } = reactData
246
+ const isGroup = computeIsGroup.value
247
+ const groupLabelField = computeGroupLabelField.value
248
+ const labelField = computeLabelField.value
249
+ if (isGroup) {
250
+ if (filterable && filterMethod) {
251
+ reactData.visibleGroupList = fullGroupList.filter(group => isOptionVisible(group) && filterMethod({ group, option: null, searchValue }))
252
+ } else if (filterable) {
253
+ reactData.visibleGroupList = fullGroupList.filter(group => isOptionVisible(group) && (!searchValue || `${group[groupLabelField]}`.indexOf(searchValue) > -1))
254
+ } else {
255
+ reactData.visibleGroupList = fullGroupList.filter(isOptionVisible)
256
+ }
257
+ } else {
258
+ if (filterable && filterMethod) {
259
+ reactData.visibleOptionList = fullOptionList.filter(option => isOptionVisible(option) && filterMethod({ group: null, option, searchValue }))
260
+ } else if (filterable) {
261
+ reactData.visibleOptionList = fullOptionList.filter(option => isOptionVisible(option) && (!searchValue || `${option[labelField]}`.indexOf(searchValue) > -1))
262
+ } else {
263
+ reactData.visibleOptionList = fullOptionList.filter(isOptionVisible)
264
+ }
265
+ }
266
+ return nextTick()
267
+ }
268
+
269
+ const cacheItemMap = () => {
270
+ const { fullOptionList, fullGroupList } = reactData
271
+ const groupOptionsField = computeGroupOptionsField.value
272
+ const key = getOptkey()
273
+ const handleOptis = (item: any) => {
274
+ if (!getOptid(item)) {
275
+ item[key] = getOptUniqueId()
276
+ }
277
+ }
278
+ if (fullGroupList.length) {
279
+ fullGroupList.forEach((group: any) => {
280
+ handleOptis(group)
281
+ if (group[groupOptionsField]) {
282
+ group[groupOptionsField].forEach(handleOptis)
283
+ }
284
+ })
285
+ } else if (fullOptionList.length) {
286
+ fullOptionList.forEach(handleOptis)
287
+ }
288
+ refreshOption()
289
+ }
290
+
291
+ const setCurrentOption = (option: any) => {
292
+ const valueField = computeValueField.value
293
+ if (option) {
294
+ reactData.currentOption = option
295
+ reactData.currentValue = option[valueField]
296
+ }
297
+ }
298
+
299
+ const scrollToOption = (option: any, isAlignBottom?: boolean) => {
300
+ return nextTick().then(() => {
301
+ if (option) {
302
+ const optWrapperElem = refOptionWrapper.value
303
+ const panelElem = refOptionPanel.value
304
+ const optElem = panelElem.querySelector(`[optid='${getOptid(option)}']`) as HTMLElement
305
+ if (optWrapperElem && optElem) {
306
+ const wrapperHeight = optWrapperElem.offsetHeight
307
+ const offsetPadding = 5
308
+ if (isAlignBottom) {
309
+ if (optElem.offsetTop + optElem.offsetHeight - optWrapperElem.scrollTop > wrapperHeight) {
310
+ optWrapperElem.scrollTop = optElem.offsetTop + optElem.offsetHeight - wrapperHeight
311
+ }
312
+ } else {
313
+ if (optElem.offsetTop + offsetPadding < optWrapperElem.scrollTop || optElem.offsetTop + offsetPadding > optWrapperElem.scrollTop + optWrapperElem.clientHeight) {
314
+ optWrapperElem.scrollTop = optElem.offsetTop - offsetPadding
315
+ }
316
+ }
317
+ }
318
+ }
319
+ })
320
+ }
321
+
322
+ const updateZindex = () => {
323
+ if (reactData.panelIndex < getLastZIndex()) {
324
+ reactData.panelIndex = nextZIndex()
325
+ }
326
+ }
327
+
328
+ const updatePlacement = () => {
329
+ return nextTick().then(() => {
330
+ const { transfer, placement } = props
331
+ const { panelIndex } = reactData
332
+ const el = refElem.value
333
+ const panelElem = refOptionPanel.value
334
+ if (panelElem && el) {
335
+ const targetHeight = el.offsetHeight
336
+ const targetWidth = el.offsetWidth
337
+ const panelHeight = panelElem.offsetHeight
338
+ const panelWidth = panelElem.offsetWidth
339
+ const marginSize = 5
340
+ const panelStyle: { [key: string]: any } = {
341
+ zIndex: panelIndex
342
+ }
343
+ const { boundingTop, boundingLeft, visibleHeight, visibleWidth } = getAbsolutePos(el)
344
+ let panelPlacement = 'bottom'
345
+ if (transfer) {
346
+ let left = boundingLeft
347
+ let top = boundingTop + targetHeight
348
+ if (placement === 'top') {
349
+ panelPlacement = 'top'
350
+ top = boundingTop - panelHeight
351
+ } else if (!placement) {
352
+ // 如果下面不够放,则向上
353
+ if (top + panelHeight + marginSize > visibleHeight) {
354
+ panelPlacement = 'top'
355
+ top = boundingTop - panelHeight
356
+ }
357
+ // 如果上面不够放,则向下(优先)
358
+ if (top < marginSize) {
359
+ panelPlacement = 'bottom'
360
+ top = boundingTop + targetHeight
361
+ }
362
+ }
363
+ // 如果溢出右边
364
+ if (left + panelWidth + marginSize > visibleWidth) {
365
+ left -= left + panelWidth + marginSize - visibleWidth
366
+ }
367
+ // 如果溢出左边
368
+ if (left < marginSize) {
369
+ left = marginSize
370
+ }
371
+ Object.assign(panelStyle, {
372
+ left: `${left}px`,
373
+ top: `${top}px`,
374
+ minWidth: `${targetWidth}px`
375
+ })
376
+ } else {
377
+ if (placement === 'top') {
378
+ panelPlacement = 'top'
379
+ panelStyle.bottom = `${targetHeight}px`
380
+ } else if (!placement) {
381
+ // 如果下面不够放,则向上
382
+ if (boundingTop + targetHeight + panelHeight > visibleHeight) {
383
+ // 如果上面不够放,则向下(优先)
384
+ if (boundingTop - targetHeight - panelHeight > marginSize) {
385
+ panelPlacement = 'top'
386
+ panelStyle.bottom = `${targetHeight}px`
387
+ }
388
+ }
389
+ }
390
+ }
391
+ reactData.panelStyle = panelStyle
392
+ reactData.panelPlacement = panelPlacement
393
+ return nextTick()
394
+ }
395
+ })
396
+ }
397
+
398
+ let hidePanelTimeout: number
399
+
400
+ const showOptionPanel = () => {
401
+ const { loading, disabled, filterable } = props
402
+ if (!loading && !disabled) {
403
+ clearTimeout(hidePanelTimeout)
404
+ if (!reactData.inited) {
405
+ reactData.inited = true
406
+ }
407
+ reactData.isActivated = true
408
+ reactData.animatVisible = true
409
+ if (filterable) {
410
+ refreshOption()
411
+ }
412
+ setTimeout(() => {
413
+ const { modelValue, multiple } = props
414
+ const currOption = findOption(multiple && modelValue ? modelValue[0] : modelValue)
415
+ reactData.visiblePanel = true
416
+ if (currOption) {
417
+ setCurrentOption(currOption)
418
+ scrollToOption(currOption)
419
+ }
420
+ handleFocusSearch()
421
+ }, 10)
422
+ updateZindex()
423
+ updatePlacement()
424
+ }
425
+ }
426
+
427
+ const hideOptionPanel = () => {
428
+ reactData.searchValue = ''
429
+ reactData.searchLoading = false
430
+ reactData.visiblePanel = false
431
+ hidePanelTimeout = window.setTimeout(() => {
432
+ reactData.animatVisible = false
433
+ }, 350)
434
+ }
435
+
436
+ const changeEvent = (evnt: Event, selectValue: any) => {
437
+ if (selectValue !== props.modelValue) {
438
+ emit('update:modelValue', selectValue)
439
+ selectMethods.dispatchEvent('change', { value: selectValue }, evnt)
440
+ // 自动更新校验状态
441
+ if ($xeform && $xeformiteminfo) {
442
+ $xeform.triggerItemEvent(evnt, $xeformiteminfo.itemConfig.field, selectValue)
443
+ }
444
+ }
445
+ }
446
+
447
+ const clearValueEvent = (evnt: Event, selectValue: any) => {
448
+ reactData.remoteValueList = []
449
+ changeEvent(evnt, selectValue)
450
+ selectMethods.dispatchEvent('clear', { value: selectValue }, evnt)
451
+ }
452
+
453
+ const clearEvent = (params: any, evnt: Event) => {
454
+ clearValueEvent(evnt, null)
455
+ hideOptionPanel()
456
+ }
457
+
458
+ const changeOptionEvent = (evnt: Event, selectValue: any, option: any) => {
459
+ const { modelValue, multiple } = props
460
+ const { remoteValueList } = reactData
461
+ if (multiple) {
462
+ let multipleValue
463
+ if (modelValue) {
464
+ if (modelValue.indexOf(selectValue) === -1) {
465
+ multipleValue = modelValue.concat([selectValue])
466
+ } else {
467
+ multipleValue = (modelValue as any[]).filter((val) => val !== selectValue)
468
+ }
469
+ } else {
470
+ multipleValue = [selectValue]
471
+ }
472
+ const remoteItem = remoteValueList.find(item => item.key === selectValue)
473
+ if (remoteItem) {
474
+ remoteItem.result = option
475
+ } else {
476
+ remoteValueList.push({ key: selectValue, result: option })
477
+ }
478
+ changeEvent(evnt, multipleValue)
479
+ } else {
480
+ reactData.remoteValueList = [{ key: selectValue, result: option }]
481
+ changeEvent(evnt, selectValue)
482
+ hideOptionPanel()
483
+ }
484
+ }
485
+
486
+ const handleGlobalMousewheelEvent = (evnt: MouseEvent) => {
487
+ const { disabled } = props
488
+ const { visiblePanel } = reactData
489
+ if (!disabled) {
490
+ if (visiblePanel) {
491
+ const panelElem = refOptionPanel.value
492
+ if (getEventTargetNode(evnt, panelElem).flag) {
493
+ updatePlacement()
494
+ } else {
495
+ hideOptionPanel()
496
+ }
497
+ }
498
+ }
499
+ }
500
+
501
+ const handleGlobalMousedownEvent = (evnt: MouseEvent) => {
502
+ const { disabled } = props
503
+ const { visiblePanel } = reactData
504
+ if (!disabled) {
505
+ const el = refElem.value
506
+ const panelElem = refOptionPanel.value
507
+ reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
508
+ if (visiblePanel && !reactData.isActivated) {
509
+ hideOptionPanel()
510
+ }
511
+ }
512
+ }
513
+
514
+ const findOffsetOption = (optionValue: any, isUpArrow: boolean) => {
515
+ const { visibleOptionList, visibleGroupList } = reactData
516
+ const isGroup = computeIsGroup.value
517
+ const valueField = computeValueField.value as 'value'
518
+ const groupOptionsField = computeGroupOptionsField.value as 'options'
519
+ let firstOption
520
+ let prevOption
521
+ let nextOption
522
+ let currOption
523
+ if (isGroup) {
524
+ for (let gIndex = 0; gIndex < visibleGroupList.length; gIndex++) {
525
+ const group = visibleGroupList[gIndex]
526
+ const groupOptionList = group[groupOptionsField]
527
+ const isGroupDisabled = group.disabled
528
+ if (groupOptionList) {
529
+ for (let index = 0; index < groupOptionList.length; index++) {
530
+ const option = groupOptionList[index]
531
+ const isVisible = isOptionVisible(option)
532
+ const isDisabled = isGroupDisabled || option.disabled
533
+ if (!firstOption && !isDisabled) {
534
+ firstOption = option
535
+ }
536
+ if (currOption) {
537
+ if (isVisible && !isDisabled) {
538
+ nextOption = option
539
+ if (!isUpArrow) {
540
+ return { offsetOption: nextOption }
541
+ }
542
+ }
543
+ }
544
+ if (optionValue === option[valueField]) {
545
+ currOption = option
546
+ if (isUpArrow) {
547
+ return { offsetOption: prevOption }
548
+ }
549
+ } else {
550
+ if (isVisible && !isDisabled) {
551
+ prevOption = option
552
+ }
553
+ }
554
+ }
555
+ }
556
+ }
557
+ } else {
558
+ for (let index = 0; index < visibleOptionList.length; index++) {
559
+ const option = visibleOptionList[index]
560
+ const isDisabled = option.disabled
561
+ if (!firstOption && !isDisabled) {
562
+ firstOption = option
563
+ }
564
+ if (currOption) {
565
+ if (!isDisabled) {
566
+ nextOption = option
567
+ if (!isUpArrow) {
568
+ return { offsetOption: nextOption }
569
+ }
570
+ }
571
+ }
572
+ if (optionValue === option[valueField]) {
573
+ currOption = option
574
+ if (isUpArrow) {
575
+ return { offsetOption: prevOption }
576
+ }
577
+ } else {
578
+ if (!isDisabled) {
579
+ prevOption = option
580
+ }
581
+ }
582
+ }
583
+ }
584
+ return { firstOption }
585
+ }
586
+
587
+ const handleGlobalKeydownEvent = (evnt: KeyboardEvent) => {
588
+ const { clearable, disabled } = props
589
+ const { visiblePanel, currentValue, currentOption } = reactData
590
+ if (!disabled) {
591
+ const isTab = hasEventKey(evnt, EVENT_KEYS.TAB)
592
+ const isEnter = hasEventKey(evnt, EVENT_KEYS.ENTER)
593
+ const isEsc = hasEventKey(evnt, EVENT_KEYS.ESCAPE)
594
+ const isUpArrow = hasEventKey(evnt, EVENT_KEYS.ARROW_UP)
595
+ const isDwArrow = hasEventKey(evnt, EVENT_KEYS.ARROW_DOWN)
596
+ const isDel = hasEventKey(evnt, EVENT_KEYS.DELETE)
597
+ const isSpacebar = hasEventKey(evnt, EVENT_KEYS.SPACEBAR)
598
+ if (isTab) {
599
+ reactData.isActivated = false
600
+ }
601
+ if (visiblePanel) {
602
+ if (isEsc || isTab) {
603
+ hideOptionPanel()
604
+ } else if (isEnter) {
605
+ evnt.preventDefault()
606
+ evnt.stopPropagation()
607
+ changeOptionEvent(evnt, currentValue, currentOption)
608
+ } else if (isUpArrow || isDwArrow) {
609
+ evnt.preventDefault()
610
+ let { firstOption, offsetOption } = findOffsetOption(currentValue, isUpArrow)
611
+ if (!offsetOption && !findOption(currentValue)) {
612
+ offsetOption = firstOption
613
+ }
614
+ setCurrentOption(offsetOption)
615
+ scrollToOption(offsetOption, isDwArrow)
616
+ } else if (isSpacebar) {
617
+ evnt.preventDefault()
618
+ }
619
+ } else if ((isUpArrow || isDwArrow || isEnter || isSpacebar) && reactData.isActivated) {
620
+ evnt.preventDefault()
621
+ showOptionPanel()
622
+ }
623
+ if (reactData.isActivated) {
624
+ if (isDel && clearable) {
625
+ clearValueEvent(evnt, null)
626
+ }
627
+ }
628
+ }
629
+ }
630
+
631
+ const handleGlobalBlurEvent = () => {
632
+ hideOptionPanel()
633
+ }
634
+
635
+ const handleFocusSearch = () => {
636
+ if (props.filterable) {
637
+ nextTick(() => {
638
+ const inpSearch = refInpSearch.value
639
+ if (inpSearch) {
640
+ inpSearch.focus()
641
+ }
642
+ })
643
+ }
644
+ }
645
+
646
+ const focusEvent = (evnt: FocusEvent) => {
647
+ if (!props.disabled) {
648
+ reactData.isActivated = true
649
+ }
650
+ selectMethods.dispatchEvent('focus', {}, evnt)
651
+ }
652
+
653
+ const blurEvent = (evnt: FocusEvent) => {
654
+ reactData.isActivated = false
655
+ selectMethods.dispatchEvent('blur', {}, evnt)
656
+ }
657
+
658
+ const modelSearchEvent = (value: string) => {
659
+ reactData.searchValue = value
660
+ }
661
+
662
+ const focusSearchEvent = () => {
663
+ reactData.isActivated = true
664
+ }
665
+
666
+ const keydownSearchEvent = (params: VxeInputDefines.KeydownEventParams) => {
667
+ const { $event } = params
668
+ const isEnter = hasEventKey($event, EVENT_KEYS.ENTER)
669
+ if (isEnter) {
670
+ $event.preventDefault()
671
+ $event.stopPropagation()
672
+ }
673
+ }
674
+
675
+ const triggerSearchEvent = XEUtils.debounce(function () {
676
+ const { remote, remoteMethod } = props
677
+ const { searchValue } = reactData
678
+ if (remote && remoteMethod) {
679
+ reactData.searchLoading = true
680
+ Promise.resolve(remoteMethod({ searchValue })).then(() => nextTick()).catch(() => nextTick()).finally(() => {
681
+ reactData.searchLoading = false
682
+ refreshOption()
683
+ })
684
+ } else {
685
+ refreshOption()
686
+ }
687
+ }, 350, { trailing: true })
688
+
689
+ const togglePanelEvent = (params: any) => {
690
+ const { $event } = params
691
+ $event.preventDefault()
692
+ if (reactData.visiblePanel) {
693
+ hideOptionPanel()
694
+ } else {
695
+ showOptionPanel()
696
+ }
697
+ }
698
+
699
+ const checkOptionDisabled = (isSelected: any, option: VxeOptionProps, group?: VxeOptgroupProps) => {
700
+ if (option.disabled) {
701
+ return true
702
+ }
703
+ if (group && group.disabled) {
704
+ return true
705
+ }
706
+ const isMaximize = computeIsMaximize.value
707
+ if (isMaximize && !isSelected) {
708
+ return true
709
+ }
710
+ return false
711
+ }
712
+
713
+ const renderOption = (list: VxeOptionProps[], group?: VxeOptgroupProps) => {
714
+ const { optionKey, modelValue, multiple } = props
715
+ const { currentValue } = reactData
716
+ const optionOpts = computeOptionOpts.value
717
+ const labelField = computeLabelField.value
718
+ const valueField = computeValueField.value
719
+ const isGroup = computeIsGroup.value
720
+ const { useKey } = optionOpts
721
+ const optionSlot = slots.option
722
+ return list.map((option, cIndex) => {
723
+ const { slots, className } = option
724
+ const optionValue = option[valueField as 'value']
725
+ const isSelected = multiple ? (modelValue && modelValue.indexOf(optionValue) > -1) : modelValue === optionValue
726
+ const isVisible = !isGroup || isOptionVisible(option)
727
+ const isDisabled = checkOptionDisabled(isSelected, option, group)
728
+ const optid = getOptid(option)
729
+ const defaultSlot = slots ? slots.default : null
730
+ const optParams = { option, group: null, $select: $xeselect }
731
+ return isVisible
732
+ ? h('div', {
733
+ key: useKey || optionKey ? optid : cIndex,
734
+ class: ['vxe-select-option', className ? (XEUtils.isFunction(className) ? className(optParams) : className) : '', {
735
+ 'is--disabled': isDisabled,
736
+ 'is--selected': isSelected,
737
+ 'is--hover': currentValue === optionValue
738
+ }],
739
+ // attrs
740
+ optid: optid,
741
+ // event
742
+ onMousedown: (evnt: MouseEvent) => {
743
+ const isLeftBtn = evnt.button === 0
744
+ if (isLeftBtn) {
745
+ evnt.stopPropagation()
746
+ }
747
+ },
748
+ onClick: (evnt: MouseEvent) => {
749
+ if (!isDisabled) {
750
+ changeOptionEvent(evnt, optionValue, option)
751
+ }
752
+ },
753
+ onMouseenter: () => {
754
+ if (!isDisabled) {
755
+ setCurrentOption(option)
756
+ }
757
+ }
758
+ }, optionSlot ? callSlot(optionSlot, optParams) : (defaultSlot ? callSlot(defaultSlot, optParams) : formatText(getFuncText(option[labelField as 'label']))))
759
+ : createCommentVNode()
760
+ })
761
+ }
762
+
763
+ const renderOptgroup = () => {
764
+ const { optionKey } = props
765
+ const { visibleGroupList } = reactData
766
+ const optionOpts = computeOptionOpts.value
767
+ const groupLabelField = computeGroupLabelField.value
768
+ const groupOptionsField = computeGroupOptionsField.value
769
+ const { useKey } = optionOpts
770
+ const optionSlot = slots.option
771
+ return visibleGroupList.map((group, gIndex) => {
772
+ const { slots, className } = group
773
+ const optid = getOptid(group)
774
+ const isGroupDisabled = group.disabled
775
+ const defaultSlot = slots ? slots.default : null
776
+ const optParams = { option: group, group, $select: $xeselect }
777
+ return h('div', {
778
+ key: useKey || optionKey ? optid : gIndex,
779
+ class: ['vxe-optgroup', className ? (XEUtils.isFunction(className) ? className(optParams) : className) : '', {
780
+ 'is--disabled': isGroupDisabled
781
+ }],
782
+ // attrs
783
+ optid: optid
784
+ }, [
785
+ h('div', {
786
+ class: 'vxe-optgroup--title'
787
+ }, optionSlot ? callSlot(optionSlot, optParams) : (defaultSlot ? callSlot(defaultSlot, optParams) : getFuncText(group[groupLabelField as 'label']))),
788
+ h('div', {
789
+ class: 'vxe-optgroup--wrapper'
790
+ }, renderOption(group[groupOptionsField as 'options'] || [], group))
791
+ ])
792
+ })
793
+ }
794
+
795
+ const renderOpts = () => {
796
+ const { visibleGroupList, visibleOptionList, searchLoading } = reactData
797
+ const isGroup = computeIsGroup.value
798
+ if (searchLoading) {
799
+ return [
800
+ h('div', {
801
+ class: 'vxe-select--search-loading'
802
+ }, [
803
+ h('i', {
804
+ class: ['vxe-select--search-icon', iconConfigStore.SELECT_LOADED]
805
+ }),
806
+ h('span', {
807
+ class: 'vxe-select--search-text'
808
+ }, getI18n('vxe.select.loadingText'))
809
+ ])
810
+ ]
811
+ }
812
+ if (isGroup) {
813
+ if (visibleGroupList.length) {
814
+ return renderOptgroup()
815
+ }
816
+ } else {
817
+ if (visibleOptionList.length) {
818
+ return renderOption(visibleOptionList)
819
+ }
820
+ }
821
+ return [
822
+ h('div', {
823
+ class: 'vxe-select--empty-placeholder'
824
+ }, props.emptyText || getI18n('vxe.select.emptyText'))
825
+ ]
826
+ }
827
+
828
+ selectMethods = {
829
+ dispatchEvent (type, params, evnt) {
830
+ emit(type, Object.assign({ $select: $xeselect, $event: evnt }, params))
831
+ },
832
+ isPanelVisible () {
833
+ return reactData.visiblePanel
834
+ },
835
+ togglePanel () {
836
+ if (reactData.visiblePanel) {
837
+ hideOptionPanel()
838
+ } else {
839
+ showOptionPanel()
840
+ }
841
+ return nextTick()
842
+ },
843
+ hidePanel () {
844
+ if (reactData.visiblePanel) {
845
+ hideOptionPanel()
846
+ }
847
+ return nextTick()
848
+ },
849
+ showPanel () {
850
+ if (!reactData.visiblePanel) {
851
+ showOptionPanel()
852
+ }
853
+ return nextTick()
854
+ },
855
+ refreshOption,
856
+ focus () {
857
+ const $input = refInput.value
858
+ reactData.isActivated = true
859
+ $input.blur()
860
+ return nextTick()
861
+ },
862
+ blur () {
863
+ const $input = refInput.value
864
+ $input.blur()
865
+ reactData.isActivated = false
866
+ return nextTick()
867
+ }
868
+ }
869
+
870
+ Object.assign($xeselect, selectMethods)
871
+
872
+ watch(() => reactData.staticOptions, (value) => {
873
+ if (value.some((item) => item.options && item.options.length)) {
874
+ reactData.fullOptionList = []
875
+ reactData.fullGroupList = value
876
+ } else {
877
+ reactData.fullGroupList = []
878
+ reactData.fullOptionList = value || []
879
+ }
880
+ cacheItemMap()
881
+ })
882
+
883
+ watch(() => props.options, (value) => {
884
+ reactData.fullGroupList = []
885
+ reactData.fullOptionList = value || []
886
+ cacheItemMap()
887
+ })
888
+
889
+ watch(() => props.optionGroups, (value) => {
890
+ reactData.fullOptionList = []
891
+ reactData.fullGroupList = value || []
892
+ cacheItemMap()
893
+ })
894
+
895
+ onMounted(() => {
896
+ nextTick(() => {
897
+ const { options, optionGroups } = props
898
+ if (optionGroups) {
899
+ reactData.fullGroupList = optionGroups
900
+ } else if (options) {
901
+ reactData.fullOptionList = options
902
+ }
903
+ cacheItemMap()
904
+ })
905
+ GlobalEvent.on($xeselect, 'mousewheel', handleGlobalMousewheelEvent)
906
+ GlobalEvent.on($xeselect, 'mousedown', handleGlobalMousedownEvent)
907
+ GlobalEvent.on($xeselect, 'keydown', handleGlobalKeydownEvent)
908
+ GlobalEvent.on($xeselect, 'blur', handleGlobalBlurEvent)
909
+ })
910
+
911
+ onUnmounted(() => {
912
+ GlobalEvent.off($xeselect, 'mousewheel')
913
+ GlobalEvent.off($xeselect, 'mousedown')
914
+ GlobalEvent.off($xeselect, 'keydown')
915
+ GlobalEvent.off($xeselect, 'blur')
916
+ })
917
+
918
+ const renderVN = () => {
919
+ const { className, popupClassName, transfer, disabled, loading, filterable } = props
920
+ const { inited, isActivated, visiblePanel } = reactData
921
+ const vSize = computeSize.value
922
+ const selectLabel = computeSelectLabel.value
923
+ const defaultSlot = slots.default
924
+ const headerSlot = slots.header
925
+ const footerSlot = slots.footer
926
+ const prefixSlot = slots.prefix
927
+ return h('div', {
928
+ ref: refElem,
929
+ class: ['vxe-select', className ? (XEUtils.isFunction(className) ? className({ $select: $xeselect }) : className) : '', {
930
+ [`size--${vSize}`]: vSize,
931
+ 'is--visivle': visiblePanel,
932
+ 'is--disabled': disabled,
933
+ 'is--filter': filterable,
934
+ 'is--loading': loading,
935
+ 'is--active': isActivated
936
+ }]
937
+ }, [
938
+ h('div', {
939
+ class: 'vxe-select-slots',
940
+ ref: 'hideOption'
941
+ }, defaultSlot ? defaultSlot({}) : []),
942
+ h(VxeInputComponent, {
943
+ ref: refInput,
944
+ clearable: props.clearable,
945
+ placeholder: props.placeholder,
946
+ readonly: true,
947
+ disabled: disabled,
948
+ type: 'text',
949
+ prefixIcon: props.prefixIcon,
950
+ suffixIcon: loading ? iconConfigStore.SELECT_LOADED : (visiblePanel ? iconConfigStore.SELECT_OPEN : iconConfigStore.SELECT_CLOSE),
951
+ modelValue: selectLabel,
952
+ onClear: clearEvent,
953
+ onClick: togglePanelEvent,
954
+ onFocus: focusEvent,
955
+ onBlur: blurEvent,
956
+ onSuffixClick: togglePanelEvent
957
+ }, prefixSlot
958
+ ? {
959
+ prefix: () => prefixSlot({})
960
+ }
961
+ : {}),
962
+ h(Teleport, {
963
+ to: 'body',
964
+ disabled: transfer ? !inited : true
965
+ }, [
966
+ h('div', {
967
+ ref: refOptionPanel,
968
+ class: ['vxe-table--ignore-clear vxe-select--panel', popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $select: $xeselect }) : popupClassName) : '', {
969
+ [`size--${vSize}`]: vSize,
970
+ 'is--transfer': transfer,
971
+ 'animat--leave': !loading && reactData.animatVisible,
972
+ 'animat--enter': !loading && visiblePanel
973
+ }],
974
+ placement: reactData.panelPlacement,
975
+ style: reactData.panelStyle
976
+ }, inited
977
+ ? [
978
+ filterable
979
+ ? h('div', {
980
+ class: 'vxe-select--panel-search'
981
+ }, [
982
+ h(VxeInputComponent, {
983
+ ref: refInpSearch,
984
+ class: 'vxe-select-search--input',
985
+ modelValue: reactData.searchValue,
986
+ clearable: true,
987
+ placeholder: getI18n('vxe.select.search'),
988
+ prefixIcon: iconConfigStore.INPUT_SEARCH,
989
+ 'onUpdate:modelValue': modelSearchEvent,
990
+ onFocus: focusSearchEvent,
991
+ onKeydown: keydownSearchEvent,
992
+ onChange: triggerSearchEvent,
993
+ onSearch: triggerSearchEvent
994
+ })
995
+ ])
996
+ : createCommentVNode(),
997
+ h('div', {
998
+ class: 'vxe-select--panel-wrapper'
999
+ }, [
1000
+ headerSlot
1001
+ ? h('div', {
1002
+ class: 'vxe-select--panel-header'
1003
+ }, headerSlot({}))
1004
+ : createCommentVNode(),
1005
+ h('div', {
1006
+ class: 'vxe-select--panel-body'
1007
+ }, [
1008
+ h('div', {
1009
+ ref: refOptionWrapper,
1010
+ class: 'vxe-select-option--wrapper'
1011
+ }, renderOpts())
1012
+ ]),
1013
+ footerSlot
1014
+ ? h('div', {
1015
+ class: 'vxe-select--panel-footer'
1016
+ }, footerSlot({}))
1017
+ : createCommentVNode()
1018
+ ])
1019
+ ]
1020
+ : [])
1021
+ ])
1022
+ ])
1023
+ }
1024
+
1025
+ $xeselect.renderVN = renderVN
1026
+
1027
+ provide('$xeselect', $xeselect)
1028
+
1029
+ return $xeselect
1030
+ },
1031
+ render () {
1032
+ return this.renderVN()
1033
+ }
1034
+ })