@element-plus/nightly 0.0.20260423 → 0.0.20260425

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 (674) hide show
  1. package/attributes.json +1 -1
  2. package/dist/index.css +1 -1
  3. package/dist/index.full.js +4763 -4445
  4. package/dist/index.full.min.js +11 -11
  5. package/dist/index.full.min.js.map +1 -1
  6. package/dist/index.full.min.mjs +10 -10
  7. package/dist/index.full.min.mjs.map +1 -1
  8. package/dist/index.full.mjs +4762 -4446
  9. package/dist/locale/af.js +1 -1
  10. package/dist/locale/af.min.js +1 -1
  11. package/dist/locale/af.min.mjs +1 -1
  12. package/dist/locale/af.mjs +1 -1
  13. package/dist/locale/ar-eg.js +1 -1
  14. package/dist/locale/ar-eg.min.js +1 -1
  15. package/dist/locale/ar-eg.min.mjs +1 -1
  16. package/dist/locale/ar-eg.mjs +1 -1
  17. package/dist/locale/ar.js +1 -1
  18. package/dist/locale/ar.min.js +1 -1
  19. package/dist/locale/ar.min.mjs +1 -1
  20. package/dist/locale/ar.mjs +1 -1
  21. package/dist/locale/az.js +1 -1
  22. package/dist/locale/az.min.js +1 -1
  23. package/dist/locale/az.min.mjs +1 -1
  24. package/dist/locale/az.mjs +1 -1
  25. package/dist/locale/bg.js +1 -1
  26. package/dist/locale/bg.min.js +1 -1
  27. package/dist/locale/bg.min.mjs +1 -1
  28. package/dist/locale/bg.mjs +1 -1
  29. package/dist/locale/bn.js +1 -1
  30. package/dist/locale/bn.min.js +1 -1
  31. package/dist/locale/bn.min.mjs +1 -1
  32. package/dist/locale/bn.mjs +1 -1
  33. package/dist/locale/ca.js +1 -1
  34. package/dist/locale/ca.min.js +1 -1
  35. package/dist/locale/ca.min.mjs +1 -1
  36. package/dist/locale/ca.mjs +1 -1
  37. package/dist/locale/ckb.js +1 -1
  38. package/dist/locale/ckb.min.js +1 -1
  39. package/dist/locale/ckb.min.mjs +1 -1
  40. package/dist/locale/ckb.mjs +1 -1
  41. package/dist/locale/cs.js +1 -1
  42. package/dist/locale/cs.min.js +1 -1
  43. package/dist/locale/cs.min.mjs +1 -1
  44. package/dist/locale/cs.mjs +1 -1
  45. package/dist/locale/da.js +1 -1
  46. package/dist/locale/da.min.js +1 -1
  47. package/dist/locale/da.min.mjs +1 -1
  48. package/dist/locale/da.mjs +1 -1
  49. package/dist/locale/de.js +1 -1
  50. package/dist/locale/de.min.js +1 -1
  51. package/dist/locale/de.min.mjs +1 -1
  52. package/dist/locale/de.mjs +1 -1
  53. package/dist/locale/el.js +1 -1
  54. package/dist/locale/el.min.js +1 -1
  55. package/dist/locale/el.min.mjs +1 -1
  56. package/dist/locale/el.mjs +1 -1
  57. package/dist/locale/en.js +1 -1
  58. package/dist/locale/en.min.js +1 -1
  59. package/dist/locale/en.min.mjs +1 -1
  60. package/dist/locale/en.mjs +1 -1
  61. package/dist/locale/eo.js +1 -1
  62. package/dist/locale/eo.min.js +1 -1
  63. package/dist/locale/eo.min.mjs +1 -1
  64. package/dist/locale/eo.mjs +1 -1
  65. package/dist/locale/es.js +1 -1
  66. package/dist/locale/es.min.js +1 -1
  67. package/dist/locale/es.min.mjs +1 -1
  68. package/dist/locale/es.mjs +1 -1
  69. package/dist/locale/et.js +1 -1
  70. package/dist/locale/et.min.js +1 -1
  71. package/dist/locale/et.min.mjs +1 -1
  72. package/dist/locale/et.mjs +1 -1
  73. package/dist/locale/eu.js +1 -1
  74. package/dist/locale/eu.min.js +1 -1
  75. package/dist/locale/eu.min.mjs +1 -1
  76. package/dist/locale/eu.mjs +1 -1
  77. package/dist/locale/fa.js +1 -1
  78. package/dist/locale/fa.min.js +1 -1
  79. package/dist/locale/fa.min.mjs +1 -1
  80. package/dist/locale/fa.mjs +1 -1
  81. package/dist/locale/fi.js +1 -1
  82. package/dist/locale/fi.min.js +1 -1
  83. package/dist/locale/fi.min.mjs +1 -1
  84. package/dist/locale/fi.mjs +1 -1
  85. package/dist/locale/fr.js +1 -1
  86. package/dist/locale/fr.min.js +1 -1
  87. package/dist/locale/fr.min.mjs +1 -1
  88. package/dist/locale/fr.mjs +1 -1
  89. package/dist/locale/he.js +1 -1
  90. package/dist/locale/he.min.js +1 -1
  91. package/dist/locale/he.min.mjs +1 -1
  92. package/dist/locale/he.mjs +1 -1
  93. package/dist/locale/hi.js +1 -1
  94. package/dist/locale/hi.min.js +1 -1
  95. package/dist/locale/hi.min.mjs +1 -1
  96. package/dist/locale/hi.mjs +1 -1
  97. package/dist/locale/hr.js +1 -1
  98. package/dist/locale/hr.min.js +1 -1
  99. package/dist/locale/hr.min.mjs +1 -1
  100. package/dist/locale/hr.mjs +1 -1
  101. package/dist/locale/hu.js +1 -1
  102. package/dist/locale/hu.min.js +1 -1
  103. package/dist/locale/hu.min.mjs +1 -1
  104. package/dist/locale/hu.mjs +1 -1
  105. package/dist/locale/hy-am.js +1 -1
  106. package/dist/locale/hy-am.min.js +1 -1
  107. package/dist/locale/hy-am.min.mjs +1 -1
  108. package/dist/locale/hy-am.mjs +1 -1
  109. package/dist/locale/id.js +1 -1
  110. package/dist/locale/id.min.js +1 -1
  111. package/dist/locale/id.min.mjs +1 -1
  112. package/dist/locale/id.mjs +1 -1
  113. package/dist/locale/it.js +1 -1
  114. package/dist/locale/it.min.js +1 -1
  115. package/dist/locale/it.min.mjs +1 -1
  116. package/dist/locale/it.mjs +1 -1
  117. package/dist/locale/ja.js +1 -1
  118. package/dist/locale/ja.min.js +1 -1
  119. package/dist/locale/ja.min.mjs +1 -1
  120. package/dist/locale/ja.mjs +1 -1
  121. package/dist/locale/kk.js +1 -1
  122. package/dist/locale/kk.min.js +1 -1
  123. package/dist/locale/kk.min.mjs +1 -1
  124. package/dist/locale/kk.mjs +1 -1
  125. package/dist/locale/km.js +1 -1
  126. package/dist/locale/km.min.js +1 -1
  127. package/dist/locale/km.min.mjs +1 -1
  128. package/dist/locale/km.mjs +1 -1
  129. package/dist/locale/ko.js +1 -1
  130. package/dist/locale/ko.min.js +1 -1
  131. package/dist/locale/ko.min.mjs +1 -1
  132. package/dist/locale/ko.mjs +1 -1
  133. package/dist/locale/ku.js +1 -1
  134. package/dist/locale/ku.min.js +1 -1
  135. package/dist/locale/ku.min.mjs +1 -1
  136. package/dist/locale/ku.mjs +1 -1
  137. package/dist/locale/ky.js +1 -1
  138. package/dist/locale/ky.min.js +1 -1
  139. package/dist/locale/ky.min.mjs +1 -1
  140. package/dist/locale/ky.mjs +1 -1
  141. package/dist/locale/lo.js +1 -1
  142. package/dist/locale/lo.min.js +1 -1
  143. package/dist/locale/lo.min.mjs +1 -1
  144. package/dist/locale/lo.mjs +1 -1
  145. package/dist/locale/lt.js +1 -1
  146. package/dist/locale/lt.min.js +1 -1
  147. package/dist/locale/lt.min.mjs +1 -1
  148. package/dist/locale/lt.mjs +1 -1
  149. package/dist/locale/lv.js +1 -1
  150. package/dist/locale/lv.min.js +1 -1
  151. package/dist/locale/lv.min.mjs +1 -1
  152. package/dist/locale/lv.mjs +1 -1
  153. package/dist/locale/mg.js +1 -1
  154. package/dist/locale/mg.min.js +1 -1
  155. package/dist/locale/mg.min.mjs +1 -1
  156. package/dist/locale/mg.mjs +1 -1
  157. package/dist/locale/mn.js +1 -1
  158. package/dist/locale/mn.min.js +1 -1
  159. package/dist/locale/mn.min.mjs +1 -1
  160. package/dist/locale/mn.mjs +1 -1
  161. package/dist/locale/ms.js +1 -1
  162. package/dist/locale/ms.min.js +1 -1
  163. package/dist/locale/ms.min.mjs +1 -1
  164. package/dist/locale/ms.mjs +1 -1
  165. package/dist/locale/my.js +1 -1
  166. package/dist/locale/my.min.js +1 -1
  167. package/dist/locale/my.min.mjs +1 -1
  168. package/dist/locale/my.mjs +1 -1
  169. package/dist/locale/nb-no.js +1 -1
  170. package/dist/locale/nb-no.min.js +1 -1
  171. package/dist/locale/nb-no.min.mjs +1 -1
  172. package/dist/locale/nb-no.mjs +1 -1
  173. package/dist/locale/nl.js +1 -1
  174. package/dist/locale/nl.min.js +1 -1
  175. package/dist/locale/nl.min.mjs +1 -1
  176. package/dist/locale/nl.mjs +1 -1
  177. package/dist/locale/no.js +1 -1
  178. package/dist/locale/no.min.js +1 -1
  179. package/dist/locale/no.min.mjs +1 -1
  180. package/dist/locale/no.mjs +1 -1
  181. package/dist/locale/pa.js +1 -1
  182. package/dist/locale/pa.min.js +1 -1
  183. package/dist/locale/pa.min.mjs +1 -1
  184. package/dist/locale/pa.mjs +1 -1
  185. package/dist/locale/pl.js +1 -1
  186. package/dist/locale/pl.min.js +1 -1
  187. package/dist/locale/pl.min.mjs +1 -1
  188. package/dist/locale/pl.mjs +1 -1
  189. package/dist/locale/pt-br.js +1 -1
  190. package/dist/locale/pt-br.min.js +1 -1
  191. package/dist/locale/pt-br.min.mjs +1 -1
  192. package/dist/locale/pt-br.mjs +1 -1
  193. package/dist/locale/pt.js +1 -1
  194. package/dist/locale/pt.min.js +1 -1
  195. package/dist/locale/pt.min.mjs +1 -1
  196. package/dist/locale/pt.mjs +1 -1
  197. package/dist/locale/ro.js +1 -1
  198. package/dist/locale/ro.min.js +1 -1
  199. package/dist/locale/ro.min.mjs +1 -1
  200. package/dist/locale/ro.mjs +1 -1
  201. package/dist/locale/ru.js +1 -1
  202. package/dist/locale/ru.min.js +1 -1
  203. package/dist/locale/ru.min.mjs +1 -1
  204. package/dist/locale/ru.mjs +1 -1
  205. package/dist/locale/sk.js +1 -1
  206. package/dist/locale/sk.min.js +1 -1
  207. package/dist/locale/sk.min.mjs +1 -1
  208. package/dist/locale/sk.mjs +1 -1
  209. package/dist/locale/sl.js +1 -1
  210. package/dist/locale/sl.min.js +1 -1
  211. package/dist/locale/sl.min.mjs +1 -1
  212. package/dist/locale/sl.mjs +1 -1
  213. package/dist/locale/sr.js +1 -1
  214. package/dist/locale/sr.min.js +1 -1
  215. package/dist/locale/sr.min.mjs +1 -1
  216. package/dist/locale/sr.mjs +1 -1
  217. package/dist/locale/sv.js +1 -1
  218. package/dist/locale/sv.min.js +1 -1
  219. package/dist/locale/sv.min.mjs +1 -1
  220. package/dist/locale/sv.mjs +1 -1
  221. package/dist/locale/sw.js +1 -1
  222. package/dist/locale/sw.min.js +1 -1
  223. package/dist/locale/sw.min.mjs +1 -1
  224. package/dist/locale/sw.mjs +1 -1
  225. package/dist/locale/ta.js +1 -1
  226. package/dist/locale/ta.min.js +1 -1
  227. package/dist/locale/ta.min.mjs +1 -1
  228. package/dist/locale/ta.mjs +1 -1
  229. package/dist/locale/te.js +1 -1
  230. package/dist/locale/te.min.js +1 -1
  231. package/dist/locale/te.min.mjs +1 -1
  232. package/dist/locale/te.mjs +1 -1
  233. package/dist/locale/th.js +1 -1
  234. package/dist/locale/th.min.js +1 -1
  235. package/dist/locale/th.min.mjs +1 -1
  236. package/dist/locale/th.mjs +1 -1
  237. package/dist/locale/tk.js +1 -1
  238. package/dist/locale/tk.min.js +1 -1
  239. package/dist/locale/tk.min.mjs +1 -1
  240. package/dist/locale/tk.mjs +1 -1
  241. package/dist/locale/tr.js +1 -1
  242. package/dist/locale/tr.min.js +1 -1
  243. package/dist/locale/tr.min.mjs +1 -1
  244. package/dist/locale/tr.mjs +1 -1
  245. package/dist/locale/ug-cn.js +1 -1
  246. package/dist/locale/ug-cn.min.js +1 -1
  247. package/dist/locale/ug-cn.min.mjs +1 -1
  248. package/dist/locale/ug-cn.mjs +1 -1
  249. package/dist/locale/uk.js +1 -1
  250. package/dist/locale/uk.min.js +1 -1
  251. package/dist/locale/uk.min.mjs +1 -1
  252. package/dist/locale/uk.mjs +1 -1
  253. package/dist/locale/uz-uz.js +1 -1
  254. package/dist/locale/uz-uz.min.js +1 -1
  255. package/dist/locale/uz-uz.min.mjs +1 -1
  256. package/dist/locale/uz-uz.mjs +1 -1
  257. package/dist/locale/vi.js +1 -1
  258. package/dist/locale/vi.min.js +1 -1
  259. package/dist/locale/vi.min.mjs +1 -1
  260. package/dist/locale/vi.mjs +1 -1
  261. package/dist/locale/zh-cn.js +1 -1
  262. package/dist/locale/zh-cn.min.js +1 -1
  263. package/dist/locale/zh-cn.min.mjs +1 -1
  264. package/dist/locale/zh-cn.mjs +1 -1
  265. package/dist/locale/zh-hk.js +1 -1
  266. package/dist/locale/zh-hk.min.js +1 -1
  267. package/dist/locale/zh-hk.min.mjs +1 -1
  268. package/dist/locale/zh-hk.mjs +1 -1
  269. package/dist/locale/zh-mo.js +1 -1
  270. package/dist/locale/zh-mo.min.js +1 -1
  271. package/dist/locale/zh-mo.min.mjs +1 -1
  272. package/dist/locale/zh-mo.mjs +1 -1
  273. package/dist/locale/zh-tw.js +1 -1
  274. package/dist/locale/zh-tw.min.js +1 -1
  275. package/dist/locale/zh-tw.min.mjs +1 -1
  276. package/dist/locale/zh-tw.mjs +1 -1
  277. package/es/components/affix/src/affix.vue.d.ts +2 -2
  278. package/es/components/alert/src/alert.d.ts +1 -1
  279. package/es/components/alert/src/alert.vue.d.ts +1 -1
  280. package/es/components/anchor/src/anchor.vue.d.ts +2 -2
  281. package/es/components/autocomplete/src/autocomplete.d.ts +4 -4
  282. package/es/components/autocomplete/src/autocomplete.vue.d.ts +5 -5
  283. package/es/components/avatar/src/avatar-group-props.d.ts +1 -1
  284. package/es/components/avatar/src/avatar-group.d.ts +3 -3
  285. package/es/components/avatar/src/avatar.d.ts +2 -2
  286. package/es/components/avatar/src/avatar.vue.d.ts +1 -1
  287. package/es/components/backtop/src/backtop.vue.d.ts +1 -1
  288. package/es/components/badge/src/badge.vue.d.ts +1 -1
  289. package/es/components/button/src/button-group.vue.d.ts +1 -1
  290. package/es/components/button/src/button.d.ts +1 -1
  291. package/es/components/button/src/button.vue.d.ts +4 -4
  292. package/es/components/card/src/card.vue.d.ts +1 -1
  293. package/es/components/carousel/src/carousel.vue.d.ts +1 -1
  294. package/es/components/cascader/src/cascader.d.ts +10 -2
  295. package/es/components/cascader/src/cascader.mjs +4 -0
  296. package/es/components/cascader/src/cascader.mjs.map +1 -1
  297. package/es/components/cascader/src/cascader.vue.d.ts +30 -22
  298. package/es/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.mjs +155 -29
  299. package/es/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  300. package/es/components/cascader/src/cascader2.mjs.map +1 -1
  301. package/es/components/cascader-panel/index.d.ts +2 -2
  302. package/es/components/cascader-panel/index.mjs +2 -2
  303. package/es/components/cascader-panel/src/config.d.ts +27 -1
  304. package/es/components/cascader-panel/src/config.mjs +18 -1
  305. package/es/components/cascader-panel/src/config.mjs.map +1 -1
  306. package/es/components/cascader-panel/src/index.mjs.map +1 -1
  307. package/es/components/cascader-panel/src/index.vue.d.ts +5 -3
  308. package/es/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.mjs +44 -5
  309. package/es/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  310. package/es/components/cascader-panel/src/menu.mjs.map +1 -1
  311. package/es/components/cascader-panel/src/menu.vue.d.ts +23 -22
  312. package/es/components/cascader-panel/src/menu.vue_vue_type_script_setup_true_lang.mjs +120 -6
  313. package/es/components/cascader-panel/src/menu.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  314. package/es/components/cascader-panel/src/node.vue_vue_type_script_setup_true_lang.mjs +4 -1
  315. package/es/components/cascader-panel/src/node.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  316. package/es/components/cascader-panel/src/node2.mjs.map +1 -1
  317. package/es/components/cascader-panel/src/types.d.ts +3 -0
  318. package/es/components/cascader-panel/src/types.mjs.map +1 -1
  319. package/es/components/cascader-panel/style/css.mjs +1 -1
  320. package/es/components/cascader-panel/style/index.mjs +1 -1
  321. package/es/components/checkbox/src/checkbox-button.vue.d.ts +6 -6
  322. package/es/components/checkbox/src/checkbox-group.vue.d.ts +3 -3
  323. package/es/components/checkbox/src/checkbox.d.ts +8 -8
  324. package/es/components/checkbox/src/checkbox.vue.d.ts +6 -6
  325. package/es/components/col/src/col.vue.d.ts +1 -1
  326. package/es/components/collapse/src/collapse-item.vue.d.ts +1 -1
  327. package/es/components/collapse/src/collapse.d.ts +1 -1
  328. package/es/components/collapse/src/collapse.vue.d.ts +2 -2
  329. package/es/components/color-picker/src/color-picker.vue.d.ts +11 -11
  330. package/es/components/color-picker-panel/src/color-picker-panel.vue.d.ts +1 -1
  331. package/es/components/config-provider/src/hooks/use-global-config.d.ts +1 -1
  332. package/es/components/date-picker/src/date-picker.d.ts +15 -15
  333. package/es/components/date-picker/src/props.d.ts +2 -2
  334. package/es/components/date-picker-panel/src/date-picker-panel.d.ts +6 -6
  335. package/es/components/date-picker-panel/src/props/date-picker-panel.d.ts +1 -1
  336. package/es/components/descriptions/src/description-item.d.ts +20 -20
  337. package/es/components/descriptions/src/description.vue.d.ts +1 -1
  338. package/es/components/dialog/src/dialog.vue.d.ts +6 -6
  339. package/es/components/divider/src/divider.d.ts +1 -1
  340. package/es/components/divider/src/divider.vue.d.ts +1 -1
  341. package/es/components/drawer/src/drawer.vue.d.ts +6 -6
  342. package/es/components/dropdown/src/dropdown-item.vue.d.ts +3 -3
  343. package/es/components/dropdown/src/dropdown-menu.vue.d.ts +1 -1
  344. package/es/components/dropdown/src/dropdown.d.ts +4 -4
  345. package/es/components/dropdown/src/dropdown.vue.d.ts +85 -85
  346. package/es/components/form/src/form-item.d.ts +2 -2
  347. package/es/components/form/src/form-item.vue.d.ts +1 -1
  348. package/es/components/form/src/form.d.ts +2 -2
  349. package/es/components/form/src/form.vue.d.ts +1 -1
  350. package/es/components/image/src/image.d.ts +1 -1
  351. package/es/components/image/src/image.vue.d.ts +6 -6
  352. package/es/components/image-viewer/src/image-viewer.vue.d.ts +3 -3
  353. package/es/components/index.d.ts +11 -11
  354. package/es/components/index.mjs +7 -7
  355. package/es/components/input/src/input.d.ts +3 -3
  356. package/es/components/input/src/input.vue.d.ts +18 -18
  357. package/es/components/input-number/src/input-number.d.ts +3 -3
  358. package/es/components/input-number/src/input-number.vue.d.ts +11 -11
  359. package/es/components/input-otp/src/input-otp.vue.d.ts +8 -8
  360. package/es/components/input-tag/src/input-tag.d.ts +1 -1
  361. package/es/components/input-tag/src/input-tag.vue.d.ts +13 -13
  362. package/es/components/link/src/link.vue.d.ts +1 -1
  363. package/es/components/mention/src/mention.d.ts +3 -3
  364. package/es/components/mention/src/mention.vue.d.ts +4 -4
  365. package/es/components/menu/src/menu.d.ts +2 -2
  366. package/es/components/menu/src/sub-menu.d.ts +1 -1
  367. package/es/components/message/src/message.d.ts +2 -2
  368. package/es/components/message/src/message.vue.d.ts +6 -6
  369. package/es/components/message-box/index.d.ts +2 -2
  370. package/es/components/message-box/src/message-box.type.d.ts +9 -3
  371. package/es/components/message-box/src/messageBox.mjs +9 -1
  372. package/es/components/message-box/src/messageBox.mjs.map +1 -1
  373. package/es/components/notification/src/notification.d.ts +2 -2
  374. package/es/components/notification/src/notification.vue.d.ts +5 -5
  375. package/es/components/pagination/src/pagination.d.ts +3 -3
  376. package/es/components/popconfirm/src/popconfirm.d.ts +2 -2
  377. package/es/components/popconfirm/src/popconfirm.vue.d.ts +3 -3
  378. package/es/components/popover/src/popover.d.ts +2 -2
  379. package/es/components/popover/src/popover.vue.d.ts +12 -12
  380. package/es/components/popper/src/composables/use-content.d.ts +3 -3
  381. package/es/components/popper/src/content.vue.d.ts +14 -14
  382. package/es/components/popper/src/popper.d.ts +2 -2
  383. package/es/components/progress/src/progress.d.ts +1 -1
  384. package/es/components/progress/src/progress.vue.d.ts +3 -3
  385. package/es/components/radio/src/radio-button.d.ts +3 -3
  386. package/es/components/radio/src/radio-button.vue.d.ts +2 -2
  387. package/es/components/radio/src/radio-group.vue.d.ts +6 -6
  388. package/es/components/radio/src/radio.d.ts +6 -6
  389. package/es/components/radio/src/radio.vue.d.ts +5 -5
  390. package/es/components/rate/src/rate.vue.d.ts +3 -3
  391. package/es/components/result/src/result.d.ts +1 -1
  392. package/es/components/result/src/result.vue.d.ts +1 -1
  393. package/es/components/row/src/row.vue.d.ts +1 -1
  394. package/es/components/scrollbar/src/scrollbar.vue.d.ts +4 -4
  395. package/es/components/segmented/index.d.ts +3 -3
  396. package/es/components/segmented/src/segmented.d.ts +1 -1
  397. package/es/components/segmented/src/segmented.vue.d.ts +2 -2
  398. package/es/components/select/src/option.d.ts +2 -2
  399. package/es/components/select/src/option.vue.d.ts +5 -5
  400. package/es/components/select/src/select.d.ts +3 -3
  401. package/es/components/select/src/select.vue.d.ts +103 -103
  402. package/es/components/select/src/useSelect.mjs +2 -1
  403. package/es/components/select/src/useSelect.mjs.map +1 -1
  404. package/es/components/select-v2/src/defaults.d.ts +1 -1
  405. package/es/components/select-v2/src/select-dropdown.d.ts +2 -2
  406. package/es/components/select-v2/src/select.vue.d.ts +79 -79
  407. package/es/components/skeleton/src/skeleton-item.d.ts +1 -1
  408. package/es/components/slider/src/button.vue.d.ts +1 -1
  409. package/es/components/slider/src/slider.vue.d.ts +7 -7
  410. package/es/components/space/src/space.d.ts +1 -1
  411. package/es/components/statistic/src/statistic.vue.d.ts +2 -2
  412. package/es/components/steps/src/item.d.ts +1 -1
  413. package/es/components/steps/src/item.vue.d.ts +1 -1
  414. package/es/components/steps/src/steps.d.ts +2 -2
  415. package/es/components/steps/src/steps.vue.d.ts +2 -2
  416. package/es/components/switch/src/switch.vue.d.ts +3 -3
  417. package/es/components/table/src/table-column/index.d.ts +26 -26
  418. package/es/components/table/src/table-footer/index.d.ts +1 -1
  419. package/es/components/table/src/table-header/index.d.ts +20 -20
  420. package/es/components/table/src/table-layout.d.ts +1 -0
  421. package/es/components/table/src/table-layout.mjs +5 -1
  422. package/es/components/table/src/table-layout.mjs.map +1 -1
  423. package/es/components/table/src/table.vue.d.ts +57 -57
  424. package/es/components/table-v2/src/table-grid.d.ts +1 -1
  425. package/es/components/table-v2/src/table-v2.d.ts +1 -1
  426. package/es/components/table-v2/style/css.mjs +1 -1
  427. package/es/components/table-v2/style/index.mjs +1 -1
  428. package/es/components/tabs/src/tab-nav.d.ts +1 -1
  429. package/es/components/tabs/src/tab-pane.vue.d.ts +1 -1
  430. package/es/components/tabs/src/tabs.d.ts +6 -6
  431. package/es/components/tag/src/tag.vue.d.ts +2 -2
  432. package/es/components/text/src/text.vue.d.ts +1 -1
  433. package/es/components/time-picker/src/common/picker.vue.d.ts +23 -23
  434. package/es/components/time-picker/src/common/props.d.ts +2 -2
  435. package/es/components/time-picker/src/time-picker.d.ts +15 -15
  436. package/es/components/time-select/src/time-select.vue.d.ts +11 -11
  437. package/es/components/timeline/src/timeline-item.vue.d.ts +1 -1
  438. package/es/components/tooltip/src/content.vue.d.ts +12 -12
  439. package/es/components/tooltip/src/tooltip.d.ts +2 -2
  440. package/es/components/tooltip/src/tooltip.vue.d.ts +14 -14
  441. package/es/components/tooltip/src/trigger.d.ts +1 -1
  442. package/es/components/tour/src/content.d.ts +1 -1
  443. package/es/components/tour/src/step.d.ts +1 -1
  444. package/es/components/tour/src/tour.d.ts +1 -1
  445. package/es/components/tour/src/tour.vue.d.ts +5 -5
  446. package/es/components/transfer/src/transfer.vue.d.ts +2 -2
  447. package/es/components/tree/src/tree.vue.d.ts +32 -32
  448. package/es/components/tree-select/src/tree-select.vue.d.ts +42 -42
  449. package/es/components/tree-v2/src/tree.vue.d.ts +8 -8
  450. package/es/components/upload/src/upload-content.d.ts +1 -1
  451. package/es/components/upload/src/upload-content.vue.d.ts +2 -2
  452. package/es/components/upload/src/upload-list.d.ts +1 -1
  453. package/es/components/upload/src/upload.d.ts +2 -2
  454. package/es/components/upload/src/upload.vue.d.ts +3 -3
  455. package/es/components/virtual-list/src/builders/build-grid.d.ts +14 -2
  456. package/es/components/virtual-list/src/builders/build-list.mjs +2 -1
  457. package/es/components/virtual-list/src/builders/build-list.mjs.map +1 -1
  458. package/es/components/virtual-list/src/components/dynamic-size-grid.d.ts +14 -2
  459. package/es/components/virtual-list/src/components/dynamic-size-list.d.ts +17 -5
  460. package/es/components/virtual-list/src/components/fixed-size-grid.d.ts +14 -2
  461. package/es/components/virtual-list/src/components/fixed-size-list.d.ts +17 -5
  462. package/es/components/virtual-list/src/props.d.ts +18 -0
  463. package/es/components/virtual-list/src/props.mjs +4 -0
  464. package/es/components/virtual-list/src/props.mjs.map +1 -1
  465. package/es/hooks/use-floating/index.d.ts +4 -4
  466. package/es/hooks/use-popper/index.d.ts +3 -3
  467. package/es/index.d.ts +10 -10
  468. package/es/index.mjs +7 -7
  469. package/es/utils/vue/size.d.ts +1 -1
  470. package/es/version.mjs +1 -1
  471. package/es/version.mjs.map +1 -1
  472. package/lib/components/affix/src/affix.vue.d.ts +2 -2
  473. package/lib/components/alert/src/alert.d.ts +1 -1
  474. package/lib/components/alert/src/alert.vue.d.ts +1 -1
  475. package/lib/components/anchor/src/anchor.vue.d.ts +2 -2
  476. package/lib/components/autocomplete/src/autocomplete.d.ts +4 -4
  477. package/lib/components/autocomplete/src/autocomplete.vue.d.ts +5 -5
  478. package/lib/components/avatar/src/avatar-group-props.d.ts +1 -1
  479. package/lib/components/avatar/src/avatar-group.d.ts +3 -3
  480. package/lib/components/avatar/src/avatar.d.ts +2 -2
  481. package/lib/components/avatar/src/avatar.vue.d.ts +1 -1
  482. package/lib/components/backtop/src/backtop.vue.d.ts +1 -1
  483. package/lib/components/badge/src/badge.vue.d.ts +1 -1
  484. package/lib/components/button/src/button-group.vue.d.ts +1 -1
  485. package/lib/components/button/src/button.d.ts +1 -1
  486. package/lib/components/button/src/button.vue.d.ts +4 -4
  487. package/lib/components/card/src/card.vue.d.ts +1 -1
  488. package/lib/components/carousel/src/carousel.vue.d.ts +1 -1
  489. package/lib/components/cascader/src/cascader.d.ts +10 -2
  490. package/lib/components/cascader/src/cascader.js +4 -0
  491. package/lib/components/cascader/src/cascader.js.map +1 -1
  492. package/lib/components/cascader/src/cascader.vue.d.ts +30 -22
  493. package/lib/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.js +154 -27
  494. package/lib/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  495. package/lib/components/cascader/src/cascader2.js.map +1 -1
  496. package/lib/components/cascader-panel/index.d.ts +2 -2
  497. package/lib/components/cascader-panel/index.js +2 -0
  498. package/lib/components/cascader-panel/src/config.d.ts +27 -1
  499. package/lib/components/cascader-panel/src/config.js +19 -0
  500. package/lib/components/cascader-panel/src/config.js.map +1 -1
  501. package/lib/components/cascader-panel/src/index.js.map +1 -1
  502. package/lib/components/cascader-panel/src/index.vue.d.ts +5 -3
  503. package/lib/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.js +44 -5
  504. package/lib/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.js.map +1 -1
  505. package/lib/components/cascader-panel/src/menu.js.map +1 -1
  506. package/lib/components/cascader-panel/src/menu.vue.d.ts +23 -22
  507. package/lib/components/cascader-panel/src/menu.vue_vue_type_script_setup_true_lang.js +119 -5
  508. package/lib/components/cascader-panel/src/menu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  509. package/lib/components/cascader-panel/src/node.vue_vue_type_script_setup_true_lang.js +4 -1
  510. package/lib/components/cascader-panel/src/node.vue_vue_type_script_setup_true_lang.js.map +1 -1
  511. package/lib/components/cascader-panel/src/node2.js.map +1 -1
  512. package/lib/components/cascader-panel/src/types.d.ts +3 -0
  513. package/lib/components/cascader-panel/src/types.js.map +1 -1
  514. package/lib/components/cascader-panel/style/css.js +1 -1
  515. package/lib/components/cascader-panel/style/index.js +1 -1
  516. package/lib/components/checkbox/src/checkbox-button.vue.d.ts +6 -6
  517. package/lib/components/checkbox/src/checkbox-group.vue.d.ts +3 -3
  518. package/lib/components/checkbox/src/checkbox.d.ts +8 -8
  519. package/lib/components/checkbox/src/checkbox.vue.d.ts +6 -6
  520. package/lib/components/col/src/col.vue.d.ts +1 -1
  521. package/lib/components/collapse/src/collapse-item.vue.d.ts +1 -1
  522. package/lib/components/collapse/src/collapse.d.ts +1 -1
  523. package/lib/components/collapse/src/collapse.vue.d.ts +2 -2
  524. package/lib/components/color-picker/src/color-picker.vue.d.ts +11 -11
  525. package/lib/components/color-picker-panel/src/color-picker-panel.vue.d.ts +1 -1
  526. package/lib/components/config-provider/src/hooks/use-global-config.d.ts +1 -1
  527. package/lib/components/date-picker/src/date-picker.d.ts +15 -15
  528. package/lib/components/date-picker/src/props.d.ts +2 -2
  529. package/lib/components/date-picker-panel/src/date-picker-panel.d.ts +6 -6
  530. package/lib/components/date-picker-panel/src/props/date-picker-panel.d.ts +1 -1
  531. package/lib/components/descriptions/src/description-item.d.ts +20 -20
  532. package/lib/components/descriptions/src/description.vue.d.ts +1 -1
  533. package/lib/components/dialog/src/dialog.vue.d.ts +6 -6
  534. package/lib/components/divider/src/divider.d.ts +1 -1
  535. package/lib/components/divider/src/divider.vue.d.ts +1 -1
  536. package/lib/components/drawer/src/drawer.vue.d.ts +6 -6
  537. package/lib/components/dropdown/src/dropdown-item.vue.d.ts +3 -3
  538. package/lib/components/dropdown/src/dropdown-menu.vue.d.ts +1 -1
  539. package/lib/components/dropdown/src/dropdown.d.ts +4 -4
  540. package/lib/components/dropdown/src/dropdown.vue.d.ts +85 -85
  541. package/lib/components/form/src/form-item.d.ts +2 -2
  542. package/lib/components/form/src/form-item.vue.d.ts +1 -1
  543. package/lib/components/form/src/form.d.ts +2 -2
  544. package/lib/components/form/src/form.vue.d.ts +1 -1
  545. package/lib/components/image/src/image.d.ts +1 -1
  546. package/lib/components/image/src/image.vue.d.ts +6 -6
  547. package/lib/components/image-viewer/src/image-viewer.vue.d.ts +3 -3
  548. package/lib/components/index.d.ts +11 -11
  549. package/lib/components/index.js +13 -11
  550. package/lib/components/input/src/input.d.ts +3 -3
  551. package/lib/components/input/src/input.vue.d.ts +18 -18
  552. package/lib/components/input-number/src/input-number.d.ts +3 -3
  553. package/lib/components/input-number/src/input-number.vue.d.ts +11 -11
  554. package/lib/components/input-otp/src/input-otp.vue.d.ts +8 -8
  555. package/lib/components/input-tag/src/input-tag.d.ts +1 -1
  556. package/lib/components/input-tag/src/input-tag.vue.d.ts +13 -13
  557. package/lib/components/link/src/link.vue.d.ts +1 -1
  558. package/lib/components/mention/src/mention.d.ts +3 -3
  559. package/lib/components/mention/src/mention.vue.d.ts +4 -4
  560. package/lib/components/menu/src/menu.d.ts +2 -2
  561. package/lib/components/menu/src/sub-menu.d.ts +1 -1
  562. package/lib/components/message/src/message.d.ts +2 -2
  563. package/lib/components/message/src/message.vue.d.ts +6 -6
  564. package/lib/components/message-box/index.d.ts +2 -2
  565. package/lib/components/message-box/src/message-box.type.d.ts +9 -3
  566. package/lib/components/message-box/src/messageBox.js +9 -1
  567. package/lib/components/message-box/src/messageBox.js.map +1 -1
  568. package/lib/components/notification/src/notification.d.ts +2 -2
  569. package/lib/components/notification/src/notification.vue.d.ts +5 -5
  570. package/lib/components/pagination/src/pagination.d.ts +3 -3
  571. package/lib/components/popconfirm/src/popconfirm.d.ts +2 -2
  572. package/lib/components/popconfirm/src/popconfirm.vue.d.ts +3 -3
  573. package/lib/components/popover/src/popover.d.ts +2 -2
  574. package/lib/components/popover/src/popover.vue.d.ts +12 -12
  575. package/lib/components/popper/src/composables/use-content.d.ts +3 -3
  576. package/lib/components/popper/src/content.vue.d.ts +14 -14
  577. package/lib/components/popper/src/popper.d.ts +2 -2
  578. package/lib/components/progress/src/progress.d.ts +1 -1
  579. package/lib/components/progress/src/progress.vue.d.ts +3 -3
  580. package/lib/components/radio/src/radio-button.d.ts +3 -3
  581. package/lib/components/radio/src/radio-button.vue.d.ts +2 -2
  582. package/lib/components/radio/src/radio-group.vue.d.ts +6 -6
  583. package/lib/components/radio/src/radio.d.ts +6 -6
  584. package/lib/components/radio/src/radio.vue.d.ts +5 -5
  585. package/lib/components/rate/src/rate.vue.d.ts +3 -3
  586. package/lib/components/result/src/result.d.ts +1 -1
  587. package/lib/components/result/src/result.vue.d.ts +1 -1
  588. package/lib/components/row/src/row.vue.d.ts +1 -1
  589. package/lib/components/scrollbar/src/scrollbar.vue.d.ts +4 -4
  590. package/lib/components/segmented/index.d.ts +3 -3
  591. package/lib/components/segmented/src/segmented.d.ts +1 -1
  592. package/lib/components/segmented/src/segmented.vue.d.ts +2 -2
  593. package/lib/components/select/src/option.d.ts +2 -2
  594. package/lib/components/select/src/option.vue.d.ts +5 -5
  595. package/lib/components/select/src/select.d.ts +3 -3
  596. package/lib/components/select/src/select.vue.d.ts +103 -103
  597. package/lib/components/select/src/useSelect.js +2 -1
  598. package/lib/components/select/src/useSelect.js.map +1 -1
  599. package/lib/components/select-v2/src/defaults.d.ts +1 -1
  600. package/lib/components/select-v2/src/select-dropdown.d.ts +2 -2
  601. package/lib/components/select-v2/src/select.vue.d.ts +79 -79
  602. package/lib/components/skeleton/src/skeleton-item.d.ts +1 -1
  603. package/lib/components/slider/src/button.vue.d.ts +1 -1
  604. package/lib/components/slider/src/slider.vue.d.ts +7 -7
  605. package/lib/components/space/src/space.d.ts +1 -1
  606. package/lib/components/statistic/src/statistic.vue.d.ts +2 -2
  607. package/lib/components/steps/src/item.d.ts +1 -1
  608. package/lib/components/steps/src/item.vue.d.ts +1 -1
  609. package/lib/components/steps/src/steps.d.ts +2 -2
  610. package/lib/components/steps/src/steps.vue.d.ts +2 -2
  611. package/lib/components/switch/src/switch.vue.d.ts +3 -3
  612. package/lib/components/table/src/table-column/index.d.ts +26 -26
  613. package/lib/components/table/src/table-footer/index.d.ts +1 -1
  614. package/lib/components/table/src/table-header/index.d.ts +20 -20
  615. package/lib/components/table/src/table-layout.d.ts +1 -0
  616. package/lib/components/table/src/table-layout.js +5 -1
  617. package/lib/components/table/src/table-layout.js.map +1 -1
  618. package/lib/components/table/src/table.vue.d.ts +57 -57
  619. package/lib/components/table-v2/src/table-grid.d.ts +1 -1
  620. package/lib/components/table-v2/src/table-v2.d.ts +1 -1
  621. package/lib/components/table-v2/style/css.js +1 -1
  622. package/lib/components/table-v2/style/index.js +1 -1
  623. package/lib/components/tabs/src/tab-nav.d.ts +1 -1
  624. package/lib/components/tabs/src/tab-pane.vue.d.ts +1 -1
  625. package/lib/components/tabs/src/tabs.d.ts +6 -6
  626. package/lib/components/tag/src/tag.vue.d.ts +2 -2
  627. package/lib/components/text/src/text.vue.d.ts +1 -1
  628. package/lib/components/time-picker/src/common/picker.vue.d.ts +23 -23
  629. package/lib/components/time-picker/src/common/props.d.ts +2 -2
  630. package/lib/components/time-picker/src/time-picker.d.ts +15 -15
  631. package/lib/components/time-select/src/time-select.vue.d.ts +11 -11
  632. package/lib/components/timeline/src/timeline-item.vue.d.ts +1 -1
  633. package/lib/components/tooltip/src/content.vue.d.ts +12 -12
  634. package/lib/components/tooltip/src/tooltip.d.ts +2 -2
  635. package/lib/components/tooltip/src/tooltip.vue.d.ts +14 -14
  636. package/lib/components/tooltip/src/trigger.d.ts +1 -1
  637. package/lib/components/tour/src/content.d.ts +1 -1
  638. package/lib/components/tour/src/step.d.ts +1 -1
  639. package/lib/components/tour/src/tour.d.ts +1 -1
  640. package/lib/components/tour/src/tour.vue.d.ts +5 -5
  641. package/lib/components/transfer/src/transfer.vue.d.ts +2 -2
  642. package/lib/components/tree/src/tree.vue.d.ts +32 -32
  643. package/lib/components/tree-select/src/tree-select.vue.d.ts +42 -42
  644. package/lib/components/tree-v2/src/tree.vue.d.ts +8 -8
  645. package/lib/components/upload/src/upload-content.d.ts +1 -1
  646. package/lib/components/upload/src/upload-content.vue.d.ts +2 -2
  647. package/lib/components/upload/src/upload-list.d.ts +1 -1
  648. package/lib/components/upload/src/upload.d.ts +2 -2
  649. package/lib/components/upload/src/upload.vue.d.ts +3 -3
  650. package/lib/components/virtual-list/src/builders/build-grid.d.ts +14 -2
  651. package/lib/components/virtual-list/src/builders/build-list.js +2 -1
  652. package/lib/components/virtual-list/src/builders/build-list.js.map +1 -1
  653. package/lib/components/virtual-list/src/components/dynamic-size-grid.d.ts +14 -2
  654. package/lib/components/virtual-list/src/components/dynamic-size-list.d.ts +17 -5
  655. package/lib/components/virtual-list/src/components/fixed-size-grid.d.ts +14 -2
  656. package/lib/components/virtual-list/src/components/fixed-size-list.d.ts +17 -5
  657. package/lib/components/virtual-list/src/props.d.ts +18 -0
  658. package/lib/components/virtual-list/src/props.js +4 -0
  659. package/lib/components/virtual-list/src/props.js.map +1 -1
  660. package/lib/hooks/use-floating/index.d.ts +4 -4
  661. package/lib/hooks/use-popper/index.d.ts +3 -3
  662. package/lib/index.d.ts +10 -10
  663. package/lib/index.js +13 -11
  664. package/lib/utils/vue/size.d.ts +1 -1
  665. package/lib/version.js +1 -1
  666. package/lib/version.js.map +1 -1
  667. package/package.json +5 -5
  668. package/tags.json +1 -1
  669. package/theme-chalk/el-cascader-panel.css +1 -1
  670. package/theme-chalk/el-cascader.css +1 -1
  671. package/theme-chalk/index.css +1 -1
  672. package/theme-chalk/src/cascader-panel.scss +11 -0
  673. package/theme-chalk/src/cascader.scss +28 -1
  674. package/web-types.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { CascaderNodePathValue, CascaderNodeValue, CascaderOption, CascaderProps, CascaderValue, ExpandTrigger, LazyLoad, isDisabled, isLeaf } from "./types.js";
2
2
  import { Node } from "./node.js";
3
- import { CascaderMenuInstance } from "./instance.js";
4
3
  import { CascaderPanelProps } from "./config.js";
4
+ import { CascaderMenuInstance } from "./instance.js";
5
5
  import "../../../index.js";
6
6
  import * as vue from "vue";
7
7
 
@@ -269,18 +269,20 @@ declare const __VLS_base: vue.DefineComponent<CascaderPanelProps, {
269
269
  scrollToExpandingNode: () => void;
270
270
  loadLazyRootNodes: () => void;
271
271
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
272
- "update:modelValue": (value: CascaderValue | null | undefined) => void;
273
272
  change: (value: CascaderValue | null | undefined) => void;
274
273
  close: () => void;
274
+ "update:modelValue": (value: CascaderValue | null | undefined) => void;
275
275
  "expand-change": (value: CascaderNodePathValue) => void;
276
276
  }, string, vue.PublicProps, Readonly<CascaderPanelProps> & Readonly<{
277
- "onUpdate:modelValue"?: ((value: CascaderValue | null | undefined) => any) | undefined;
278
277
  onChange?: ((value: CascaderValue | null | undefined) => any) | undefined;
279
278
  onClose?: (() => any) | undefined;
279
+ "onUpdate:modelValue"?: ((value: CascaderValue | null | undefined) => any) | undefined;
280
280
  "onExpand-change"?: ((value: CascaderNodePathValue) => any) | undefined;
281
281
  }>, {
282
282
  props: CascaderProps;
283
283
  border: boolean;
284
+ height: number;
285
+ itemSize: number;
284
286
  options: CascaderOption[];
285
287
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
286
288
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -40,6 +40,9 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.
40
40
  const checkedNodes = (0, vue.ref)([]);
41
41
  const isHoverMenu = (0, vue.computed)(() => config.value.expandTrigger === "hover");
42
42
  const renderLabelFn = (0, vue.computed)(() => props.renderLabel || slots.default);
43
+ const virtualScroll = (0, vue.computed)(() => props.virtualScroll);
44
+ const itemSize = (0, vue.computed)(() => props.itemSize);
45
+ const height = (0, vue.computed)(() => props.height);
43
46
  const initStore = () => {
44
47
  const { options } = props;
45
48
  const cfg = config.value;
@@ -162,7 +165,10 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.
162
165
  if (!_vueuse_core.isClient) return;
163
166
  menuList.value.forEach((menu) => {
164
167
  const menuElement = menu?.$el;
165
- if (menuElement) {
168
+ if (menuElement) if (virtualScroll.value) {
169
+ const activeIndex = menu?.getActiveNodeIndex?.();
170
+ if (activeIndex !== void 0 && activeIndex >= 0) menu?.scrollToItem?.(activeIndex);
171
+ } else {
166
172
  const container = menuElement.querySelector(`.${ns.namespace.value}-scrollbar__wrap`);
167
173
  let activeNode = menuElement.querySelector(`.${ns.b("node")}.in-active-path`);
168
174
  if (!activeNode) {
@@ -178,10 +184,31 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.
178
184
  const code = require_event$1.getEventCode(e);
179
185
  switch (code) {
180
186
  case require_aria$1.EVENT_CODE.up:
181
- case require_aria$1.EVENT_CODE.down:
187
+ case require_aria$1.EVENT_CODE.down: {
182
188
  e.preventDefault();
183
- require_aria.focusNode(require_aria.getSibling(target, code === require_aria$1.EVENT_CODE.up ? -1 : 1, `.${ns.b("node")}[tabindex="-1"]`));
189
+ const distance = code === require_aria$1.EVENT_CODE.up ? -1 : 1;
190
+ if (virtualScroll.value) {
191
+ const menuIndex = require_utils.getMenuIndex(target);
192
+ const menu = menuList.value[menuIndex];
193
+ if (menu) {
194
+ const currentIndex = menu.getNodeIndexById(target.id);
195
+ if (currentIndex >= 0) {
196
+ const nodesInMenu = menus.value[menuIndex] ?? [];
197
+ const nodesCount = nodesInMenu.length;
198
+ let targetIndex = currentIndex + distance;
199
+ while (targetIndex >= 0 && targetIndex < nodesCount) {
200
+ if (!nodesInMenu[targetIndex].isDisabled) {
201
+ menu.focusNodeAt(targetIndex);
202
+ return;
203
+ }
204
+ targetIndex += distance;
205
+ }
206
+ }
207
+ }
208
+ }
209
+ require_aria.focusNode(require_aria.getSibling(target, distance, `.${ns.b("node")}[tabindex="-1"]`));
184
210
  break;
211
+ }
185
212
  case require_aria$1.EVENT_CODE.left: {
186
213
  e.preventDefault();
187
214
  const expandedNode = menuList.value[require_utils.getMenuIndex(target) - 1]?.$el.querySelector(`.${ns.b("node")}[aria-expanded="true"]`);
@@ -207,6 +234,9 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.
207
234
  isHoverMenu,
208
235
  initialLoaded,
209
236
  renderLabelFn,
237
+ virtualScroll,
238
+ itemSize,
239
+ height,
210
240
  lazyLoad,
211
241
  expandNode,
212
242
  handleCheckChange
@@ -255,11 +285,20 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.
255
285
  ref_for: true,
256
286
  ref: (item) => menuList.value[index] = item,
257
287
  index,
258
- nodes: [...menu]
288
+ nodes: [...menu],
289
+ "virtual-scroll": virtualScroll.value,
290
+ "item-size": itemSize.value,
291
+ height: height.value
259
292
  }, {
260
293
  empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "empty")]),
261
294
  _: 3
262
- }, 8, ["index", "nodes"]);
295
+ }, 8, [
296
+ "index",
297
+ "nodes",
298
+ "virtual-scroll",
299
+ "item-size",
300
+ "height"
301
+ ]);
263
302
  }), 128))], 34);
264
303
  };
265
304
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/index.vue"],"sourcesContent":["<template>\n <div\n :class=\"[ns.b('panel'), ns.is('bordered', border)]\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item as CascaderMenuInstance)\"\n :index=\"index\"\n :nodes=\"[...menu]\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-menu>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n useSlots,\n watch,\n} from 'vue'\nimport { cloneDeep, flattenDeep, isEqual } from 'lodash-unified'\nimport {\n castArray,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isEmpty,\n scrollIntoView,\n unique,\n} from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { useNamespace } from '@element-plus/hooks'\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node from './node'\nimport { cascaderPanelEmits, useCascaderConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type {\n CascaderNode,\n CascaderNodeValue,\n CascaderOption,\n CascaderValue,\n ElCascaderPanelContext,\n} from './types'\nimport type { CascaderMenuInstance } from './instance'\nimport type { CascaderPanelProps } from './config'\n\ndefineOptions({\n name: 'ElCascaderPanel',\n})\n\nconst props = withDefaults(defineProps<CascaderPanelProps>(), {\n options: () => [],\n props: () => ({}),\n border: true,\n})\nconst emit = defineEmits(cascaderPanelEmits)\n\n// for interrupt sync check status in lazy mode\nlet manualChecked = false\n\nconst ns = useNamespace('cascader')\nconst config = useCascaderConfig(props)\nconst slots = useSlots()\n\nlet store: Store\nconst initialLoaded = ref(true)\nconst initialLoadedOnce = ref(false)\nconst menuList = ref<CascaderMenuInstance[]>([])\nconst checkedValue = ref<CascaderValue>()\nconst menus = ref<CascaderNode[][]>([])\nconst expandingNode = ref<CascaderNode>()\nconst checkedNodes = ref<CascaderNode[]>([])\n\nconst isHoverMenu = computed(() => config.value.expandTrigger === 'hover')\nconst renderLabelFn = computed(() => props.renderLabel || slots.default)\n\nconst initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded.value = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded.value = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n}\n\nconst lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList?: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n dataList && store?.appendNodes(dataList, parent as Node)\n dataList && cb?.(dataList)\n if (node.level === 0) {\n initialLoadedOnce.value = true\n }\n }\n\n const reject = () => {\n node!.loading = false\n node!.loaded = false\n if (node!.level === 0) {\n initialLoaded.value = true\n }\n }\n\n cfg.lazyLoad(node, resolve, reject)\n}\n\nconst expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: CascaderNode\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n}\n\nconst handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && expandParentNode(node)\n}\n\nconst expandParentNode = (node: Node | undefined) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n}\n\nconst getFlattedNodes = (leafOnly: boolean) => store?.getFlattedNodes(leafOnly)\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter(({ checked }) => checked !== false)\n}\n\nconst clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n menus.value = menus.value.slice(0, 1)\n expandingNode.value = undefined\n emit('expand-change', [])\n}\n\nconst calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : (values[0] ?? null)\n}\n\nconst syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded.value ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = unique(\n flattenDeep(castArray(modelValue as CascaderNodeValue[]))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple ? castArray(modelValue) : [modelValue]\n const nodes = unique(\n values.map((val) =>\n store?.getNodeByValue(val as CascaderNodeValue, leafOnly)\n )\n ) as Node[]\n syncMenuState(nodes, forced)\n checkedValue.value = cloneDeep(modelValue ?? undefined)\n }\n}\n\nconst syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = undefined\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n reactive(newNodes).forEach((node) => node.doCheck(true))\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n}\n\nconst scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n const container = menuElement.querySelector(\n `.${ns.namespace.value}-scrollbar__wrap`\n )\n let activeNode = menuElement.querySelector(\n `.${ns.b('node')}.in-active-path`\n )\n if (!activeNode) {\n const activeElements = menuElement.querySelectorAll(\n `.${ns.b('node')}.${ns.is('active')}`\n )\n activeNode = activeElements[activeElements.length - 1]\n }\n scrollIntoView(container, activeNode)\n }\n })\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(\n target,\n distance,\n `.${ns.b('node')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n `.${ns.b('node')}[aria-expanded=\"true\"]`\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n `.${ns.b('node')}[tabindex=\"-1\"]`\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n checkNode(target)\n break\n }\n}\n\nprovide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n initialLoaded,\n renderLabelFn,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n)\n\nwatch(\n config,\n (newVal, oldVal) => {\n if (isEqual(newVal, oldVal)) return\n initStore()\n },\n {\n immediate: true,\n }\n)\n\nwatch(() => props.options, initStore, {\n deep: true,\n})\n\nwatch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n },\n {\n deep: true,\n }\n)\n\nwatch(\n () => checkedValue.value,\n (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n }\n)\n\nconst loadLazyRootNodes = () => {\n if (initialLoadedOnce.value) return\n initStore()\n}\n\nonBeforeUpdate(() => (menuList.value = []))\n\nonMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\ndefineExpose({\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description clear checked nodes\n */\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n loadLazyRootNodes,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/index.vue"],"sourcesContent":["<template>\n <div\n :class=\"[ns.b('panel'), ns.is('bordered', border)]\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item as CascaderMenuInstance)\"\n :index=\"index\"\n :nodes=\"[...menu]\"\n :virtual-scroll=\"virtualScroll\"\n :item-size=\"itemSize\"\n :height=\"height\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-menu>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n useSlots,\n watch,\n} from 'vue'\nimport { cloneDeep, flattenDeep, isEqual } from 'lodash-unified'\nimport {\n castArray,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isEmpty,\n scrollIntoView,\n unique,\n} from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { useNamespace } from '@element-plus/hooks'\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node from './node'\nimport {\n CASCADER_PANEL_HEIGHT,\n CASCADER_PANEL_ITEM_SIZE,\n cascaderPanelEmits,\n useCascaderConfig,\n} from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type {\n CascaderNode,\n CascaderNodeValue,\n CascaderOption,\n CascaderValue,\n ElCascaderPanelContext,\n} from './types'\nimport type { CascaderMenuInstance } from './instance'\nimport type { CascaderPanelProps } from './config'\n\ndefineOptions({\n name: 'ElCascaderPanel',\n})\n\nconst props = withDefaults(defineProps<CascaderPanelProps>(), {\n options: () => [],\n props: () => ({}),\n border: true,\n itemSize: CASCADER_PANEL_ITEM_SIZE,\n height: CASCADER_PANEL_HEIGHT,\n})\nconst emit = defineEmits(cascaderPanelEmits)\n\n// for interrupt sync check status in lazy mode\nlet manualChecked = false\n\nconst ns = useNamespace('cascader')\nconst config = useCascaderConfig(props)\nconst slots = useSlots()\n\nlet store: Store\nconst initialLoaded = ref(true)\nconst initialLoadedOnce = ref(false)\nconst menuList = ref<CascaderMenuInstance[]>([])\nconst checkedValue = ref<CascaderValue>()\nconst menus = ref<CascaderNode[][]>([])\nconst expandingNode = ref<CascaderNode>()\nconst checkedNodes = ref<CascaderNode[]>([])\n\nconst isHoverMenu = computed(() => config.value.expandTrigger === 'hover')\nconst renderLabelFn = computed(() => props.renderLabel || slots.default)\nconst virtualScroll = computed(() => props.virtualScroll)\nconst itemSize = computed(() => props.itemSize)\nconst height = computed(() => props.height)\n\nconst initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded.value = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded.value = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n}\n\nconst lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList?: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n dataList && store?.appendNodes(dataList, parent as Node)\n dataList && cb?.(dataList)\n if (node.level === 0) {\n initialLoadedOnce.value = true\n }\n }\n\n const reject = () => {\n node!.loading = false\n node!.loaded = false\n if (node!.level === 0) {\n initialLoaded.value = true\n }\n }\n\n cfg.lazyLoad(node, resolve, reject)\n}\n\nconst expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: CascaderNode\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n}\n\nconst handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && expandParentNode(node)\n}\n\nconst expandParentNode = (node: Node | undefined) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n}\n\nconst getFlattedNodes = (leafOnly: boolean) => store?.getFlattedNodes(leafOnly)\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter(({ checked }) => checked !== false)\n}\n\nconst clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n menus.value = menus.value.slice(0, 1)\n expandingNode.value = undefined\n emit('expand-change', [])\n}\n\nconst calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : (values[0] ?? null)\n}\n\nconst syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded.value ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = unique(\n flattenDeep(castArray(modelValue as CascaderNodeValue[]))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple ? castArray(modelValue) : [modelValue]\n const nodes = unique(\n values.map((val) =>\n store?.getNodeByValue(val as CascaderNodeValue, leafOnly)\n )\n ) as Node[]\n syncMenuState(nodes, forced)\n checkedValue.value = cloneDeep(modelValue ?? undefined)\n }\n}\n\nconst syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = undefined\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n reactive(newNodes).forEach((node) => node.doCheck(true))\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n}\n\nconst scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n // virtual scroll mode, use scrollToItem method\n if (virtualScroll.value) {\n const activeIndex = menu?.getActiveNodeIndex?.()\n if (activeIndex !== undefined && activeIndex >= 0) {\n menu?.scrollToItem?.(activeIndex)\n }\n } else {\n // logic for non-virtual scroll mode\n const container = menuElement.querySelector(\n `.${ns.namespace.value}-scrollbar__wrap`\n )\n let activeNode = menuElement.querySelector(\n `.${ns.b('node')}.in-active-path`\n )\n if (!activeNode) {\n const activeElements = menuElement.querySelectorAll(\n `.${ns.b('node')}.${ns.is('active')}`\n )\n activeNode = activeElements[activeElements.length - 1]\n }\n scrollIntoView(container, activeNode)\n }\n }\n })\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n\n if (virtualScroll.value) {\n const menuIndex = getMenuIndex(target)\n const menu = menuList.value[menuIndex]\n if (menu) {\n // For virtual scroll, calculate the target index and use focusNodeAt\n const currentIndex = menu.getNodeIndexById(target.id)\n if (currentIndex >= 0) {\n const nodesInMenu = menus.value[menuIndex] ?? []\n const nodesCount = nodesInMenu.length\n // Find the next non-disabled node\n let targetIndex = currentIndex + distance\n while (targetIndex >= 0 && targetIndex < nodesCount) {\n if (!nodesInMenu[targetIndex].isDisabled) {\n menu.focusNodeAt(targetIndex)\n return\n }\n targetIndex += distance\n }\n }\n }\n }\n\n focusNode(\n getSibling(\n target,\n distance,\n `.${ns.b('node')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n `.${ns.b('node')}[aria-expanded=\"true\"]`\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n `.${ns.b('node')}[tabindex=\"-1\"]`\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n checkNode(target)\n break\n }\n}\n\nprovide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n initialLoaded,\n renderLabelFn,\n virtualScroll,\n itemSize,\n height,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n)\n\nwatch(\n config,\n (newVal, oldVal) => {\n if (isEqual(newVal, oldVal)) return\n initStore()\n },\n {\n immediate: true,\n }\n)\n\nwatch(() => props.options, initStore, {\n deep: true,\n})\n\nwatch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n },\n {\n deep: true,\n }\n)\n\nwatch(\n () => checkedValue.value,\n (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n }\n)\n\nconst loadLazyRootNodes = () => {\n if (initialLoadedOnce.value) return\n initStore()\n}\n\nonBeforeUpdate(() => (menuList.value = []))\n\nonMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\ndefineExpose({\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description clear checked nodes\n */\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n loadLazyRootNodes,\n})\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n <el-scrollbar\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n :class=\"ns.b()\"\n :wrap-class=\"ns.e('wrap')\"\n :view-class=\"[ns.e('list'), ns.is('empty', isEmpty)]\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isLoading\" :class=\"ns.e('empty-text')\">\n <el-icon size=\"14\" :class=\"ns.is('loading')\">\n <loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n <slot name=\"empty\">{{ t('el.cascader.noData') }}</slot>\n </div>\n <!-- eslint-disable vue/html-self-closing -->\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n :class=\"ns.e('hover-zone')\"\n ></svg>\n <!-- eslint-enable vue/html-self-closing -->\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { useId, useLocale, useNamespace } from '@element-plus/hooks'\nimport { Loading } from '@element-plus/icons-vue'\nimport ElIcon from '@element-plus/components/icon'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { CascaderNode } from './types'\nimport type { PropType } from 'vue'\n\ndefineOptions({\n name: 'ElCascaderMenu',\n})\n\nconst props = defineProps({\n nodes: {\n type: Array as PropType<CascaderNode[]>,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n})\n\nconst instance = getCurrentInstance()!\nconst ns = useNamespace('cascader-menu')\n\nconst { t } = useLocale()\nconst id = useId()\nlet activeNode: HTMLElement\nlet hoverTimer: number | undefined\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst hoverZone = ref<SVGSVGElement>()\n\nconst isEmpty = computed(() => !props.nodes.length)\nconst isLoading = computed(() => !panel.initialLoaded)\nconst menuId = computed(() => `${id.value}-${props.index}`)\n\nconst handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n}\n\nconst handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n const scrollTop = el.querySelector(`.${ns.e('wrap')}`)?.scrollTop || 0\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold)\n }\n}\n\nconst clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = undefined\n}\n\nconst clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n}\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"menu.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n <template v-if=\"virtualScroll\">\n <div\n :key=\"menuId\"\n :class=\"ns.b()\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-fixed-size-list\n ref=\"virtualListRef\"\n :height=\"height\"\n :item-size=\"itemSize\"\n :data=\"nodes\"\n :total=\"nodes.length\"\n :class-name=\"ns.e('list')\"\n inner-element=\"ul\"\n :inner-props=\"{\n role: 'menu',\n class: ns.is('empty', isEmpty),\n }\"\n >\n <template #default=\"{ data, index: nodeIndex, style }\">\n <el-cascader-node\n :key=\"data[nodeIndex].uid\"\n :node=\"data[nodeIndex]\"\n :menu-id=\"menuId\"\n :style=\"style\"\n @expand=\"handleExpand\"\n />\n </template>\n </el-fixed-size-list>\n <div v-if=\"isLoading\" :class=\"ns.e('empty-text')\">\n <el-icon :size=\"14\" :class=\"ns.is('loading')\">\n <Loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n <slot name=\"empty\">{{ t('el.cascader.noData') }}</slot>\n </div>\n <!-- eslint-disable vue/html-self-closing -->\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n :class=\"ns.e('hover-zone')\"\n ></svg>\n <!-- eslint-enable vue/html-self-closing -->\n </div>\n </template>\n <el-scrollbar\n v-else\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n :class=\"ns.b()\"\n :wrap-class=\"ns.e('wrap')\"\n :view-class=\"[ns.e('list'), ns.is('empty', isEmpty)]\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isLoading\" :class=\"ns.e('empty-text')\">\n <el-icon :size=\"14\" :class=\"ns.is('loading')\">\n <Loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n <slot name=\"empty\">{{ t('el.cascader.noData') }}</slot>\n </div>\n <!-- eslint-disable vue/html-self-closing -->\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n :class=\"ns.e('hover-zone')\"\n ></svg>\n <!-- eslint-enable vue/html-self-closing -->\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, nextTick, ref } from 'vue'\nimport { clamp } from 'lodash-unified'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { FixedSizeList as ElFixedSizeList } from '@element-plus/components/virtual-list'\nimport { useId, useLocale, useNamespace } from '@element-plus/hooks'\nimport { Loading } from '@element-plus/icons-vue'\nimport ElIcon from '@element-plus/components/icon'\nimport { focusNode } from '@element-plus/utils'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\nimport { CASCADER_PANEL_HEIGHT, CASCADER_PANEL_ITEM_SIZE } from './config'\n\nimport type { CascaderNode } from './types'\nimport type { CascaderCommonProps } from './config'\nimport type { FixedSizeListInstance } from '@element-plus/components/virtual-list'\n\ndefineOptions({\n name: 'ElCascaderMenu',\n})\n\nconst props = withDefaults(\n defineProps<\n {\n nodes: CascaderNode[]\n index: number\n } & Pick<CascaderCommonProps, 'virtualScroll' | 'itemSize' | 'height'>\n >(),\n {\n virtualScroll: false,\n itemSize: CASCADER_PANEL_ITEM_SIZE,\n height: CASCADER_PANEL_HEIGHT,\n }\n)\n\nconst instance = getCurrentInstance()!\nconst ns = useNamespace('cascader-menu')\n\nconst { t } = useLocale()\nconst id = useId()\nlet activeNode: HTMLElement\nlet hoverTimer: number | undefined\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst hoverZone = ref<SVGSVGElement>()\nconst virtualListRef = ref<FixedSizeListInstance>()\n\nconst isEmpty = computed(() => !props.nodes.length)\nconst isLoading = computed(() => !panel.initialLoaded)\nconst menuId = computed(() => `${id.value}-${props.index}`)\n\nconst getActiveNodeIndex = () => {\n let activeNodeId: number | undefined\n\n if (panel.expandingNode) {\n const { level, pathNodes } = panel.expandingNode\n if (props.index < level) {\n activeNodeId = pathNodes[props.index]?.uid\n } else if (props.index === level && panel.checkedNodes.length > 0) {\n activeNodeId = panel.checkedNodes[0]?.pathNodes[props.index]?.uid\n }\n } else if (\n panel.checkedNodes.length > 0 &&\n props.index < panel.checkedNodes[0].pathNodes.length\n ) {\n activeNodeId = panel.checkedNodes[0].pathNodes[props.index]?.uid\n }\n\n return activeNodeId !== undefined\n ? props.nodes.findIndex((node) => node.uid === activeNodeId)\n : -1\n}\n\nconst getNodeIndexById = (nodeId: string | undefined) => {\n if (!nodeId) return -1\n return props.nodes.findIndex(\n (node) => `${menuId.value}-${node.uid}` === nodeId\n )\n}\n\nconst scrollToItem = (index: number) => {\n const targetIndex = clamp(index, 0, props.nodes.length - 1)\n virtualListRef.value?.scrollToItem(targetIndex)\n}\n\nconst focusNodeAt = (index: number) => {\n if (!props.nodes.length) return\n const targetIndex = clamp(index, 0, props.nodes.length - 1)\n scrollToItem(targetIndex)\n nextTick(() => {\n const node = (instance.vnode.el as HTMLElement)?.querySelector<HTMLElement>(\n `#${menuId.value}-${props.nodes[targetIndex].uid}`\n )\n if (node) focusNode(node)\n })\n}\n\nconst handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n}\n\nconst handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n\n const scrollTop = props.virtualScroll\n ? virtualListRef.value?.states?.scrollOffset || 0\n : el.querySelector(`.${ns.e('wrap')}`)?.scrollTop || 0\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold)\n }\n}\n\nconst clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = undefined\n}\n\nconst clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n}\n\ndefineExpose({\n getActiveNodeIndex,\n getNodeIndexById,\n scrollToItem,\n focusNodeAt,\n virtualListRef,\n get $el() {\n return instance.vnode.el as HTMLElement\n },\n})\n</script>\n"],"mappings":""}
@@ -1,32 +1,33 @@
1
1
  import "./types.js";
2
2
  import { Node } from "./node.js";
3
+ import { CascaderCommonProps } from "./config.js";
4
+ import { FixedSizeListInstance } from "../../virtual-list/src/components/fixed-size-list.js";
5
+ import "../../virtual-list/index.js";
3
6
  import * as vue from "vue";
4
- import { PropType } from "vue";
5
7
 
6
8
  //#region ../../packages/components/cascader-panel/src/menu.vue.d.ts
7
- declare var __VLS_29: {};
9
+ type __VLS_Props = {
10
+ nodes: Node[];
11
+ index: number;
12
+ } & Pick<CascaderCommonProps, 'virtualScroll' | 'itemSize' | 'height'>;
13
+ declare var __VLS_28: {}, __VLS_58: {};
8
14
  type __VLS_Slots = {} & {
9
- empty?: (props: typeof __VLS_29) => any;
15
+ empty?: (props: typeof __VLS_28) => any;
16
+ } & {
17
+ empty?: (props: typeof __VLS_58) => any;
10
18
  };
11
- declare const __VLS_base: vue.DefineComponent<vue.ExtractPropTypes<{
12
- nodes: {
13
- type: PropType<Node[]>;
14
- required: true;
15
- };
16
- index: {
17
- type: NumberConstructor;
18
- required: true;
19
- };
20
- }>, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
21
- nodes: {
22
- type: PropType<Node[]>;
23
- required: true;
24
- };
25
- index: {
26
- type: NumberConstructor;
27
- required: true;
28
- };
29
- }>> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
19
+ declare const __VLS_base: vue.DefineComponent<__VLS_Props, {
20
+ getActiveNodeIndex: () => number;
21
+ getNodeIndexById: (nodeId: string | undefined) => number;
22
+ scrollToItem: (index: number) => void;
23
+ focusNodeAt: (index: number) => void;
24
+ virtualListRef: vue.Ref<FixedSizeListInstance | undefined, FixedSizeListInstance | undefined>;
25
+ readonly $el: HTMLElement;
26
+ }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
27
+ height: number;
28
+ itemSize: number;
29
+ virtualScroll: boolean;
30
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
30
31
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
31
32
  declare const _default: typeof __VLS_export;
32
33
  type __VLS_WithSlots<T, S> = T & {
@@ -1,11 +1,15 @@
1
1
  const require_runtime = require('../../../_virtual/_rolldown/runtime.js');
2
+ const require_aria = require('../../../utils/dom/aria.js');
2
3
  const require_index = require('../../../hooks/use-locale/index.js');
3
4
  const require_index$1 = require('../../../hooks/use-namespace/index.js');
4
5
  const require_index$2 = require('../../../hooks/use-id/index.js');
5
6
  const require_index$3 = require('../../icon/index.js');
6
7
  const require_index$4 = require('../../scrollbar/index.js');
8
+ const require_config = require('./config.js');
9
+ const require_fixed_size_list = require('../../virtual-list/src/components/fixed-size-list.js');
7
10
  const require_types = require('./types.js');
8
11
  const require_node = require('./node2.js');
12
+ let lodash_unified = require("lodash-unified");
9
13
  let _element_plus_icons_vue = require("@element-plus/icons-vue");
10
14
  let vue = require("vue");
11
15
 
@@ -21,9 +25,24 @@ var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.d
21
25
  index: {
22
26
  type: Number,
23
27
  required: true
28
+ },
29
+ virtualScroll: {
30
+ type: Boolean,
31
+ required: false,
32
+ default: false
33
+ },
34
+ itemSize: {
35
+ type: Number,
36
+ required: false,
37
+ default: require_config.CASCADER_PANEL_ITEM_SIZE
38
+ },
39
+ height: {
40
+ type: Number,
41
+ required: false,
42
+ default: require_config.CASCADER_PANEL_HEIGHT
24
43
  }
25
44
  },
26
- setup(__props) {
45
+ setup(__props, { expose: __expose }) {
27
46
  const props = __props;
28
47
  const instance = (0, vue.getCurrentInstance)();
29
48
  const ns = require_index$1.useNamespace("cascader-menu");
@@ -33,9 +52,36 @@ var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.d
33
52
  let hoverTimer;
34
53
  const panel = (0, vue.inject)(require_types.CASCADER_PANEL_INJECTION_KEY);
35
54
  const hoverZone = (0, vue.ref)();
55
+ const virtualListRef = (0, vue.ref)();
36
56
  const isEmpty = (0, vue.computed)(() => !props.nodes.length);
37
57
  const isLoading = (0, vue.computed)(() => !panel.initialLoaded);
38
58
  const menuId = (0, vue.computed)(() => `${id.value}-${props.index}`);
59
+ const getActiveNodeIndex = () => {
60
+ let activeNodeId;
61
+ if (panel.expandingNode) {
62
+ const { level, pathNodes } = panel.expandingNode;
63
+ if (props.index < level) activeNodeId = pathNodes[props.index]?.uid;
64
+ else if (props.index === level && panel.checkedNodes.length > 0) activeNodeId = panel.checkedNodes[0]?.pathNodes[props.index]?.uid;
65
+ } else if (panel.checkedNodes.length > 0 && props.index < panel.checkedNodes[0].pathNodes.length) activeNodeId = panel.checkedNodes[0].pathNodes[props.index]?.uid;
66
+ return activeNodeId !== void 0 ? props.nodes.findIndex((node) => node.uid === activeNodeId) : -1;
67
+ };
68
+ const getNodeIndexById = (nodeId) => {
69
+ if (!nodeId) return -1;
70
+ return props.nodes.findIndex((node) => `${menuId.value}-${node.uid}` === nodeId);
71
+ };
72
+ const scrollToItem = (index) => {
73
+ const targetIndex = (0, lodash_unified.clamp)(index, 0, props.nodes.length - 1);
74
+ virtualListRef.value?.scrollToItem(targetIndex);
75
+ };
76
+ const focusNodeAt = (index) => {
77
+ if (!props.nodes.length) return;
78
+ const targetIndex = (0, lodash_unified.clamp)(index, 0, props.nodes.length - 1);
79
+ scrollToItem(targetIndex);
80
+ (0, vue.nextTick)(() => {
81
+ const node = instance.vnode.el?.querySelector(`#${menuId.value}-${props.nodes[targetIndex].uid}`);
82
+ if (node) require_aria.focusNode(node);
83
+ });
84
+ };
39
85
  const handleExpand = (e) => {
40
86
  activeNode = e.target;
41
87
  };
@@ -49,7 +95,7 @@ var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.d
49
95
  const startX = e.clientX - left;
50
96
  const top = activeNode.offsetTop;
51
97
  const bottom = top + activeNode.offsetHeight;
52
- const scrollTop = el.querySelector(`.${ns.e("wrap")}`)?.scrollTop || 0;
98
+ const scrollTop = props.virtualScroll ? virtualListRef.value?.states?.scrollOffset || 0 : el.querySelector(`.${ns.e("wrap")}`)?.scrollTop || 0;
53
99
  hoverZone.value.innerHTML = `
54
100
  <path style="pointer-events: auto;" fill="transparent" d="M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z" />
55
101
  <path style="pointer-events: auto;" fill="transparent" d="M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z" />
@@ -66,8 +112,76 @@ var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.d
66
112
  hoverZone.value.innerHTML = "";
67
113
  clearHoverTimer();
68
114
  };
115
+ __expose({
116
+ getActiveNodeIndex,
117
+ getNodeIndexById,
118
+ scrollToItem,
119
+ focusNodeAt,
120
+ virtualListRef,
121
+ get $el() {
122
+ return instance.vnode.el;
123
+ }
124
+ });
69
125
  return (_ctx, _cache) => {
70
- return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$4.ElScrollbar), {
126
+ return __props.virtualScroll ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
127
+ key: menuId.value,
128
+ class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
129
+ onMousemove: handleMouseMove,
130
+ onMouseleave: clearHoverZone
131
+ }, [
132
+ (0, vue.createVNode)((0, vue.unref)(require_fixed_size_list.default), {
133
+ ref_key: "virtualListRef",
134
+ ref: virtualListRef,
135
+ height: __props.height,
136
+ "item-size": __props.itemSize,
137
+ data: __props.nodes,
138
+ total: __props.nodes.length,
139
+ "class-name": (0, vue.unref)(ns).e("list"),
140
+ "inner-element": "ul",
141
+ "inner-props": {
142
+ role: "menu",
143
+ class: (0, vue.unref)(ns).is("empty", isEmpty.value)
144
+ }
145
+ }, {
146
+ default: (0, vue.withCtx)(({ data, index: nodeIndex, style }) => [((0, vue.openBlock)(), (0, vue.createBlock)(require_node.default, {
147
+ key: data[nodeIndex].uid,
148
+ node: data[nodeIndex],
149
+ "menu-id": menuId.value,
150
+ style: (0, vue.normalizeStyle)(style),
151
+ onExpand: handleExpand
152
+ }, null, 8, [
153
+ "node",
154
+ "menu-id",
155
+ "style"
156
+ ]))]),
157
+ _: 1
158
+ }, 8, [
159
+ "height",
160
+ "item-size",
161
+ "data",
162
+ "total",
163
+ "class-name",
164
+ "inner-props"
165
+ ]),
166
+ isLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
167
+ key: 0,
168
+ class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
169
+ }, [(0, vue.createVNode)((0, vue.unref)(require_index$3.ElIcon), {
170
+ size: 14,
171
+ class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
172
+ }, {
173
+ default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.Loading))]),
174
+ _: 1
175
+ }, 8, ["class"]), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.loading")), 1)], 2)) : isEmpty.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
176
+ key: 1,
177
+ class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
178
+ }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.noData")), 1)])], 2)) : (0, vue.unref)(panel)?.isHoverMenu ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createCommentVNode)(" eslint-disable vue/html-self-closing "), ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
179
+ ref_key: "hoverZone",
180
+ ref: hoverZone,
181
+ class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("hover-zone"))
182
+ }, null, 2))], 2112)) : (0, vue.createCommentVNode)("v-if", true),
183
+ (0, vue.createCommentVNode)(" eslint-enable vue/html-self-closing ")
184
+ ], 34)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$4.ElScrollbar), {
71
185
  key: menuId.value,
72
186
  tag: "ul",
73
187
  role: "menu",
@@ -90,7 +204,7 @@ var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.d
90
204
  key: 0,
91
205
  class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
92
206
  }, [(0, vue.createVNode)((0, vue.unref)(require_index$3.ElIcon), {
93
- size: "14",
207
+ size: 14,
94
208
  class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
95
209
  }, {
96
210
  default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_element_plus_icons_vue.Loading))]),
@@ -110,7 +224,7 @@ var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.d
110
224
  "class",
111
225
  "wrap-class",
112
226
  "view-class"
113
- ]);
227
+ ]));
114
228
  };
115
229
  }
116
230
  });
@@ -1 +1 @@
1
- {"version":3,"file":"menu.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n <el-scrollbar\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n :class=\"ns.b()\"\n :wrap-class=\"ns.e('wrap')\"\n :view-class=\"[ns.e('list'), ns.is('empty', isEmpty)]\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isLoading\" :class=\"ns.e('empty-text')\">\n <el-icon size=\"14\" :class=\"ns.is('loading')\">\n <loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n <slot name=\"empty\">{{ t('el.cascader.noData') }}</slot>\n </div>\n <!-- eslint-disable vue/html-self-closing -->\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n :class=\"ns.e('hover-zone')\"\n ></svg>\n <!-- eslint-enable vue/html-self-closing -->\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { useId, useLocale, useNamespace } from '@element-plus/hooks'\nimport { Loading } from '@element-plus/icons-vue'\nimport ElIcon from '@element-plus/components/icon'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { CascaderNode } from './types'\nimport type { PropType } from 'vue'\n\ndefineOptions({\n name: 'ElCascaderMenu',\n})\n\nconst props = defineProps({\n nodes: {\n type: Array as PropType<CascaderNode[]>,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n})\n\nconst instance = getCurrentInstance()!\nconst ns = useNamespace('cascader-menu')\n\nconst { t } = useLocale()\nconst id = useId()\nlet activeNode: HTMLElement\nlet hoverTimer: number | undefined\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst hoverZone = ref<SVGSVGElement>()\n\nconst isEmpty = computed(() => !props.nodes.length)\nconst isLoading = computed(() => !panel.initialLoaded)\nconst menuId = computed(() => `${id.value}-${props.index}`)\n\nconst handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n}\n\nconst handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n const scrollTop = el.querySelector(`.${ns.e('wrap')}`)?.scrollTop || 0\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold)\n }\n}\n\nconst clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = undefined\n}\n\nconst clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;EAqDA,MAAM,QAAQ;EAWd,MAAM,wCAA+B;EACrC,MAAM,KAAK,6BAAa,gBAAe;EAEvC,MAAM,EAAE,MAAM,yBAAU;EACxB,MAAM,KAAK,uBAAM;EACjB,IAAI;EACJ,IAAI;EAEJ,MAAM,wBAAe,2CAA6B;EAElD,MAAM,0BAA+B;EAErC,MAAM,kCAAyB,CAAC,MAAM,MAAM,OAAM;EAClD,MAAM,oCAA2B,CAAC,MAAM,cAAa;EACrD,MAAM,iCAAwB,GAAG,GAAG,MAAM,GAAG,MAAM,QAAO;EAE1D,MAAM,gBAAgB,MAAkB;AACtC,gBAAa,EAAE;;EAGjB,MAAM,mBAAmB,MAAkB;AACzC,OAAI,CAAC,MAAM,eAAe,CAAC,cAAc,CAAC,UAAU,MAAO;AAE3D,OAAI,WAAW,SAAS,EAAE,OAAsB,EAAE;AAChD,qBAAgB;IAEhB,MAAM,KAAK,SAAS,MAAM;IAC1B,MAAM,EAAE,SAAS,GAAG,uBAAsB;IAC1C,MAAM,EAAE,aAAa,iBAAiB;IACtC,MAAM,SAAS,EAAE,UAAU;IAC3B,MAAM,MAAM,WAAW;IACvB,MAAM,SAAS,MAAM,WAAW;IAChC,MAAM,YAAY,GAAG,cAAc,IAAI,GAAG,EAAE,OAAO,GAAG,EAAE,aAAa;AAErE,cAAU,MAAM,YAAY;uEACuC,OAAO,GAAG,IAAI,IAAI,YAAY,GAAG,UAAU,IAAI,IAAI;uEACnD,OAAO,GAAG,OAAO,IAAI,YAAY,GAAG,eAAe,UAAU,IAAI,OAAO;;cAElI,CAAC,WACV,cAAa,OAAO,WAAW,gBAAgB,MAAM,OAAO,eAAc;;EAI9E,MAAM,wBAAwB;AAC5B,OAAI,CAAC,WAAY;AACjB,gBAAa,WAAU;AACvB,gBAAa;;EAGf,MAAM,uBAAuB;AAC3B,OAAI,CAAC,UAAU,MAAO;AACtB,aAAU,MAAM,YAAY;AAC5B,oBAAgB;;;oEAlFD,4BAAA,EAAA;IAhCZ,KAAK,OAAA;IACN,KAAI;IACJ,MAAK;IACJ,8CAAO,GAAE,CAAC,GAAC,CAAA;IACX,6BAAY,GAAE,CAAC,EAAC,OAAA;IAChB,cAAU,gBAAG,GAAE,CAAC,EAAC,OAAA,iBAAU,GAAE,CAAC,GAAE,SAAU,QAAA,MAAO,CAAA;IACjD,aAAW;IACX,cAAY;;oCAGU;4DAKrB,cAAA,0BALe,QAAA,QAAR,SAAI;wDAKX,sBAAA;OAJC,KAAK,KAAK;OACJ;OACN,WAAS,OAAA;OACT,UAAQ;;;KAEA,UAAA,2DAKL,OAAA;;MALiB,8CAAO,GAAE,CAAC,EAAC,aAAA,CAAA;6CAGtB,uBAAA,EAAA;MAFD,MAAK;MAAM,8CAAO,GAAE,CAAC,GAAE,UAAA,CAAA;;sCACnB,qCAAA,gCAAA,CAAA;;gDACH,8CACP,EAAC,CAAA,sBAAA,CAAA,EAAA,EAAA,SAEU,QAAA,2DAEV,OAAA;;MAFoB,8CAAO,GAAE,CAAC,EAAC,aAAA,CAAA;6BACoB,KAAA,QAAA,SAAA,EAAA,QAAA,kEAAjC,EAAC,CAAA,qBAAA,CAAA,EAAA,EAAA,0BAIZ,MAAK,EAAE,iEAGb,cAAA,EAAA,KAAA,GAAA,EAAA,6BALP,yCAA6C,qDAKtC,OAAA;eAFD;MAAJ,KAAI;MACH,8CAAO,GAAE,CAAC,EAAC,aAAA,CAAA;;iCAEd,wCAA4C"}
1
+ {"version":3,"file":"menu.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n <template v-if=\"virtualScroll\">\n <div\n :key=\"menuId\"\n :class=\"ns.b()\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-fixed-size-list\n ref=\"virtualListRef\"\n :height=\"height\"\n :item-size=\"itemSize\"\n :data=\"nodes\"\n :total=\"nodes.length\"\n :class-name=\"ns.e('list')\"\n inner-element=\"ul\"\n :inner-props=\"{\n role: 'menu',\n class: ns.is('empty', isEmpty),\n }\"\n >\n <template #default=\"{ data, index: nodeIndex, style }\">\n <el-cascader-node\n :key=\"data[nodeIndex].uid\"\n :node=\"data[nodeIndex]\"\n :menu-id=\"menuId\"\n :style=\"style\"\n @expand=\"handleExpand\"\n />\n </template>\n </el-fixed-size-list>\n <div v-if=\"isLoading\" :class=\"ns.e('empty-text')\">\n <el-icon :size=\"14\" :class=\"ns.is('loading')\">\n <Loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n <slot name=\"empty\">{{ t('el.cascader.noData') }}</slot>\n </div>\n <!-- eslint-disable vue/html-self-closing -->\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n :class=\"ns.e('hover-zone')\"\n ></svg>\n <!-- eslint-enable vue/html-self-closing -->\n </div>\n </template>\n <el-scrollbar\n v-else\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n :class=\"ns.b()\"\n :wrap-class=\"ns.e('wrap')\"\n :view-class=\"[ns.e('list'), ns.is('empty', isEmpty)]\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isLoading\" :class=\"ns.e('empty-text')\">\n <el-icon :size=\"14\" :class=\"ns.is('loading')\">\n <Loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n <slot name=\"empty\">{{ t('el.cascader.noData') }}</slot>\n </div>\n <!-- eslint-disable vue/html-self-closing -->\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n :class=\"ns.e('hover-zone')\"\n ></svg>\n <!-- eslint-enable vue/html-self-closing -->\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, nextTick, ref } from 'vue'\nimport { clamp } from 'lodash-unified'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { FixedSizeList as ElFixedSizeList } from '@element-plus/components/virtual-list'\nimport { useId, useLocale, useNamespace } from '@element-plus/hooks'\nimport { Loading } from '@element-plus/icons-vue'\nimport ElIcon from '@element-plus/components/icon'\nimport { focusNode } from '@element-plus/utils'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\nimport { CASCADER_PANEL_HEIGHT, CASCADER_PANEL_ITEM_SIZE } from './config'\n\nimport type { CascaderNode } from './types'\nimport type { CascaderCommonProps } from './config'\nimport type { FixedSizeListInstance } from '@element-plus/components/virtual-list'\n\ndefineOptions({\n name: 'ElCascaderMenu',\n})\n\nconst props = withDefaults(\n defineProps<\n {\n nodes: CascaderNode[]\n index: number\n } & Pick<CascaderCommonProps, 'virtualScroll' | 'itemSize' | 'height'>\n >(),\n {\n virtualScroll: false,\n itemSize: CASCADER_PANEL_ITEM_SIZE,\n height: CASCADER_PANEL_HEIGHT,\n }\n)\n\nconst instance = getCurrentInstance()!\nconst ns = useNamespace('cascader-menu')\n\nconst { t } = useLocale()\nconst id = useId()\nlet activeNode: HTMLElement\nlet hoverTimer: number | undefined\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst hoverZone = ref<SVGSVGElement>()\nconst virtualListRef = ref<FixedSizeListInstance>()\n\nconst isEmpty = computed(() => !props.nodes.length)\nconst isLoading = computed(() => !panel.initialLoaded)\nconst menuId = computed(() => `${id.value}-${props.index}`)\n\nconst getActiveNodeIndex = () => {\n let activeNodeId: number | undefined\n\n if (panel.expandingNode) {\n const { level, pathNodes } = panel.expandingNode\n if (props.index < level) {\n activeNodeId = pathNodes[props.index]?.uid\n } else if (props.index === level && panel.checkedNodes.length > 0) {\n activeNodeId = panel.checkedNodes[0]?.pathNodes[props.index]?.uid\n }\n } else if (\n panel.checkedNodes.length > 0 &&\n props.index < panel.checkedNodes[0].pathNodes.length\n ) {\n activeNodeId = panel.checkedNodes[0].pathNodes[props.index]?.uid\n }\n\n return activeNodeId !== undefined\n ? props.nodes.findIndex((node) => node.uid === activeNodeId)\n : -1\n}\n\nconst getNodeIndexById = (nodeId: string | undefined) => {\n if (!nodeId) return -1\n return props.nodes.findIndex(\n (node) => `${menuId.value}-${node.uid}` === nodeId\n )\n}\n\nconst scrollToItem = (index: number) => {\n const targetIndex = clamp(index, 0, props.nodes.length - 1)\n virtualListRef.value?.scrollToItem(targetIndex)\n}\n\nconst focusNodeAt = (index: number) => {\n if (!props.nodes.length) return\n const targetIndex = clamp(index, 0, props.nodes.length - 1)\n scrollToItem(targetIndex)\n nextTick(() => {\n const node = (instance.vnode.el as HTMLElement)?.querySelector<HTMLElement>(\n `#${menuId.value}-${props.nodes[targetIndex].uid}`\n )\n if (node) focusNode(node)\n })\n}\n\nconst handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n}\n\nconst handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n\n const scrollTop = props.virtualScroll\n ? virtualListRef.value?.states?.scrollOffset || 0\n : el.querySelector(`.${ns.e('wrap')}`)?.scrollTop || 0\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold)\n }\n}\n\nconst clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = undefined\n}\n\nconst clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n}\n\ndefineExpose({\n getActiveNodeIndex,\n getNodeIndexById,\n scrollToItem,\n focusNodeAt,\n virtualListRef,\n get $el() {\n return instance.vnode.el as HTMLElement\n },\n})\n</script>\n"],"mappings":"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"}
@@ -24,7 +24,10 @@ var node_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.d
24
24
  type: Object,
25
25
  required: true
26
26
  },
27
- menuId: String
27
+ menuId: {
28
+ type: String,
29
+ required: false
30
+ }
28
31
  },
29
32
  emits: ["expand"],
30
33
  setup(__props, { emit: __emit }) {
@@ -1 +1 @@
1
- {"version":3,"file":"node.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/node.vue"],"sourcesContent":["<template>\n <li\n :id=\"`${menuId}-${node.uid}`\"\n role=\"menuitem\"\n :aria-haspopup=\"!isLeaf\"\n :aria-owns=\"isLeaf ? undefined : menuId\"\n :aria-expanded=\"inExpandingPath\"\n :tabindex=\"expandable ? -1 : undefined\"\n :class=\"[\n ns.b(),\n ns.is('selectable', checkStrictly),\n ns.is('active', node.checked),\n ns.is('disabled', !expandable),\n inExpandingPath && 'in-active-path',\n inCheckedPath && 'in-checked-path',\n ]\"\n @mouseenter=\"handleHoverExpand\"\n @focus=\"handleHoverExpand\"\n @click=\"handleClick\"\n >\n <!-- prefix -->\n <el-checkbox\n v-if=\"multiple && showPrefix\"\n :model-value=\"node.checked\"\n :indeterminate=\"node.indeterminate\"\n :disabled=\"isDisabled\"\n @click.stop\n @update:model-value=\"handleSelectCheck\"\n />\n <el-radio\n v-else-if=\"checkStrictly && showPrefix\"\n :model-value=\"checkedNodeId\"\n :label=\"node.uid\"\n :disabled=\"isDisabled\"\n @update:model-value=\"handleSelectCheck\"\n @click.stop\n >\n <!--\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n -->\n <span />\n </el-radio>\n <el-icon v-else-if=\"isLeaf && node.checked\" :class=\"ns.e('prefix')\">\n <check />\n </el-icon>\n\n <!-- content -->\n <node-content :node=\"node\" />\n <!-- postfix -->\n <template v-if=\"!isLeaf\">\n <el-icon v-if=\"node.loading\" :class=\"[ns.is('loading'), ns.e('postfix')]\">\n <loading />\n </el-icon>\n <el-icon v-else :class=\"['arrow-right', ns.e('postfix')]\">\n <arrow-right />\n </el-icon>\n </template>\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport ElRadio from '@element-plus/components/radio'\nimport ElIcon from '@element-plus/components/icon'\nimport { useNamespace } from '@element-plus/hooks'\nimport { ArrowRight, Check, Loading } from '@element-plus/icons-vue'\nimport NodeContent from './node-content'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { CascaderNode } from './types'\nimport type { PropType } from 'vue'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\n\ndefineOptions({\n name: 'ElCascaderNode',\n})\n\nconst props = defineProps({\n node: {\n type: Object as PropType<CascaderNode>,\n required: true,\n },\n menuId: String,\n})\nconst emit = defineEmits(['expand'])\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst ns = useNamespace('cascader-node')\nconst isHoverMenu = computed(() => panel.isHoverMenu)\nconst multiple = computed(() => panel.config.multiple)\nconst checkStrictly = computed(() => panel.config.checkStrictly)\nconst showPrefix = computed(() => panel.config.showPrefix)\nconst checkedNodeId = computed(() => panel.checkedNodes[0]?.uid)\nconst isDisabled = computed(() => props.node.isDisabled)\nconst isLeaf = computed(() => props.node.isLeaf)\nconst expandable = computed(\n () => (checkStrictly.value && !isLeaf.value) || !isDisabled.value\n)\nconst inExpandingPath = computed(() => isInPath(panel.expandingNode!))\n\n// only useful in check-strictly mode\nconst inCheckedPath = computed(\n () => checkStrictly.value && panel.checkedNodes.some(isInPath)\n)\n\nconst isInPath = (node: CascaderNode) => {\n const { level, uid } = props.node\n return node?.pathNodes[level - 1]?.uid === uid\n}\n\nconst doExpand = () => {\n if (inExpandingPath.value) return\n panel.expandNode(props.node)\n}\n\nconst doCheck = (checked: boolean) => {\n const { node } = props\n if (checked === node.checked) return\n panel.handleCheckChange(node, checked)\n}\n\nconst doLoad = () => {\n panel.lazyLoad(props.node, () => {\n if (!isLeaf.value) doExpand()\n })\n}\n\nconst handleHoverExpand = (e: Event) => {\n if (!isHoverMenu.value) return\n handleExpand()\n !isLeaf.value && emit('expand', e)\n}\n\nconst handleExpand = () => {\n const { node } = props\n // do not exclude leaf node because the menus expanded might have to reset\n if (!expandable.value || node.loading) return\n node.loaded ? doExpand() : doLoad()\n}\n\nconst handleClick = () => {\n if (\n isLeaf.value &&\n !isDisabled.value &&\n !checkStrictly.value &&\n !multiple.value\n ) {\n handleCheck(true)\n } else if (\n ((panel.config.checkOnClickNode &&\n (multiple.value || checkStrictly.value)) ||\n (isLeaf.value && panel.config.checkOnClickLeaf)) &&\n !isDisabled.value\n ) {\n handleSelectCheck(!props.node.checked)\n } else if (!isHoverMenu.value) {\n handleExpand()\n }\n}\n\nconst handleSelectCheck = (checked: CheckboxValueType | undefined) => {\n if (checkStrictly.value) {\n doCheck(checked as boolean)\n if (props.node.loaded) {\n doExpand()\n }\n } else {\n handleCheck(checked as boolean)\n }\n}\n\nconst handleCheck = (checked: boolean) => {\n if (!props.node.loaded) {\n doLoad()\n } else {\n doCheck(checked)\n !checkStrictly.value && doExpand()\n }\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"node.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/node.vue"],"sourcesContent":["<template>\n <li\n :id=\"`${menuId}-${node.uid}`\"\n role=\"menuitem\"\n :aria-haspopup=\"!isLeaf\"\n :aria-owns=\"isLeaf ? undefined : menuId\"\n :aria-expanded=\"inExpandingPath\"\n :tabindex=\"expandable ? -1 : undefined\"\n :class=\"[\n ns.b(),\n ns.is('selectable', checkStrictly),\n ns.is('active', node.checked),\n ns.is('disabled', !expandable),\n inExpandingPath && 'in-active-path',\n inCheckedPath && 'in-checked-path',\n ]\"\n @mouseenter=\"handleHoverExpand\"\n @focus=\"handleHoverExpand\"\n @click=\"handleClick\"\n >\n <!-- prefix -->\n <el-checkbox\n v-if=\"multiple && showPrefix\"\n :model-value=\"node.checked\"\n :indeterminate=\"node.indeterminate\"\n :disabled=\"isDisabled\"\n @click.stop\n @update:model-value=\"handleSelectCheck\"\n />\n <el-radio\n v-else-if=\"checkStrictly && showPrefix\"\n :model-value=\"checkedNodeId\"\n :label=\"node.uid\"\n :disabled=\"isDisabled\"\n @update:model-value=\"handleSelectCheck\"\n @click.stop\n >\n <!--\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n -->\n <span />\n </el-radio>\n <el-icon v-else-if=\"isLeaf && node.checked\" :class=\"ns.e('prefix')\">\n <check />\n </el-icon>\n\n <!-- content -->\n <node-content :node=\"node\" />\n <!-- postfix -->\n <template v-if=\"!isLeaf\">\n <el-icon v-if=\"node.loading\" :class=\"[ns.is('loading'), ns.e('postfix')]\">\n <loading />\n </el-icon>\n <el-icon v-else :class=\"['arrow-right', ns.e('postfix')]\">\n <arrow-right />\n </el-icon>\n </template>\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport ElRadio from '@element-plus/components/radio'\nimport ElIcon from '@element-plus/components/icon'\nimport { useNamespace } from '@element-plus/hooks'\nimport { ArrowRight, Check, Loading } from '@element-plus/icons-vue'\nimport NodeContent from './node-content'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { CascaderNode } from './types'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\n\ndefineOptions({\n name: 'ElCascaderNode',\n})\n\nconst props = defineProps<{\n node: CascaderNode\n menuId?: string\n}>()\nconst emit = defineEmits(['expand'])\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst ns = useNamespace('cascader-node')\nconst isHoverMenu = computed(() => panel.isHoverMenu)\nconst multiple = computed(() => panel.config.multiple)\nconst checkStrictly = computed(() => panel.config.checkStrictly)\nconst showPrefix = computed(() => panel.config.showPrefix)\nconst checkedNodeId = computed(() => panel.checkedNodes[0]?.uid)\nconst isDisabled = computed(() => props.node.isDisabled)\nconst isLeaf = computed(() => props.node.isLeaf)\nconst expandable = computed(\n () => (checkStrictly.value && !isLeaf.value) || !isDisabled.value\n)\nconst inExpandingPath = computed(() => isInPath(panel.expandingNode!))\n\n// only useful in check-strictly mode\nconst inCheckedPath = computed(\n () => checkStrictly.value && panel.checkedNodes.some(isInPath)\n)\n\nconst isInPath = (node: CascaderNode) => {\n const { level, uid } = props.node\n return node?.pathNodes[level - 1]?.uid === uid\n}\n\nconst doExpand = () => {\n if (inExpandingPath.value) return\n panel.expandNode(props.node)\n}\n\nconst doCheck = (checked: boolean) => {\n const { node } = props\n if (checked === node.checked) return\n panel.handleCheckChange(node, checked)\n}\n\nconst doLoad = () => {\n panel.lazyLoad(props.node, () => {\n if (!isLeaf.value) doExpand()\n })\n}\n\nconst handleHoverExpand = (e: Event) => {\n if (!isHoverMenu.value) return\n handleExpand()\n !isLeaf.value && emit('expand', e)\n}\n\nconst handleExpand = () => {\n const { node } = props\n // do not exclude leaf node because the menus expanded might have to reset\n if (!expandable.value || node.loading) return\n node.loaded ? doExpand() : doLoad()\n}\n\nconst handleClick = () => {\n if (\n isLeaf.value &&\n !isDisabled.value &&\n !checkStrictly.value &&\n !multiple.value\n ) {\n handleCheck(true)\n } else if (\n ((panel.config.checkOnClickNode &&\n (multiple.value || checkStrictly.value)) ||\n (isLeaf.value && panel.config.checkOnClickLeaf)) &&\n !isDisabled.value\n ) {\n handleSelectCheck(!props.node.checked)\n } else if (!isHoverMenu.value) {\n handleExpand()\n }\n}\n\nconst handleSelectCheck = (checked: CheckboxValueType | undefined) => {\n if (checkStrictly.value) {\n doCheck(checked as boolean)\n if (props.node.loaded) {\n doExpand()\n }\n } else {\n handleCheck(checked as boolean)\n }\n}\n\nconst handleCheck = (checked: boolean) => {\n if (!props.node.loaded) {\n doLoad()\n } else {\n doCheck(checked)\n !checkStrictly.value && doExpand()\n }\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"node2.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/node.vue"],"sourcesContent":["<template>\n <li\n :id=\"`${menuId}-${node.uid}`\"\n role=\"menuitem\"\n :aria-haspopup=\"!isLeaf\"\n :aria-owns=\"isLeaf ? undefined : menuId\"\n :aria-expanded=\"inExpandingPath\"\n :tabindex=\"expandable ? -1 : undefined\"\n :class=\"[\n ns.b(),\n ns.is('selectable', checkStrictly),\n ns.is('active', node.checked),\n ns.is('disabled', !expandable),\n inExpandingPath && 'in-active-path',\n inCheckedPath && 'in-checked-path',\n ]\"\n @mouseenter=\"handleHoverExpand\"\n @focus=\"handleHoverExpand\"\n @click=\"handleClick\"\n >\n <!-- prefix -->\n <el-checkbox\n v-if=\"multiple && showPrefix\"\n :model-value=\"node.checked\"\n :indeterminate=\"node.indeterminate\"\n :disabled=\"isDisabled\"\n @click.stop\n @update:model-value=\"handleSelectCheck\"\n />\n <el-radio\n v-else-if=\"checkStrictly && showPrefix\"\n :model-value=\"checkedNodeId\"\n :label=\"node.uid\"\n :disabled=\"isDisabled\"\n @update:model-value=\"handleSelectCheck\"\n @click.stop\n >\n <!--\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n -->\n <span />\n </el-radio>\n <el-icon v-else-if=\"isLeaf && node.checked\" :class=\"ns.e('prefix')\">\n <check />\n </el-icon>\n\n <!-- content -->\n <node-content :node=\"node\" />\n <!-- postfix -->\n <template v-if=\"!isLeaf\">\n <el-icon v-if=\"node.loading\" :class=\"[ns.is('loading'), ns.e('postfix')]\">\n <loading />\n </el-icon>\n <el-icon v-else :class=\"['arrow-right', ns.e('postfix')]\">\n <arrow-right />\n </el-icon>\n </template>\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport ElRadio from '@element-plus/components/radio'\nimport ElIcon from '@element-plus/components/icon'\nimport { useNamespace } from '@element-plus/hooks'\nimport { ArrowRight, Check, Loading } from '@element-plus/icons-vue'\nimport NodeContent from './node-content'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { CascaderNode } from './types'\nimport type { PropType } from 'vue'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\n\ndefineOptions({\n name: 'ElCascaderNode',\n})\n\nconst props = defineProps({\n node: {\n type: Object as PropType<CascaderNode>,\n required: true,\n },\n menuId: String,\n})\nconst emit = defineEmits(['expand'])\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst ns = useNamespace('cascader-node')\nconst isHoverMenu = computed(() => panel.isHoverMenu)\nconst multiple = computed(() => panel.config.multiple)\nconst checkStrictly = computed(() => panel.config.checkStrictly)\nconst showPrefix = computed(() => panel.config.showPrefix)\nconst checkedNodeId = computed(() => panel.checkedNodes[0]?.uid)\nconst isDisabled = computed(() => props.node.isDisabled)\nconst isLeaf = computed(() => props.node.isLeaf)\nconst expandable = computed(\n () => (checkStrictly.value && !isLeaf.value) || !isDisabled.value\n)\nconst inExpandingPath = computed(() => isInPath(panel.expandingNode!))\n\n// only useful in check-strictly mode\nconst inCheckedPath = computed(\n () => checkStrictly.value && panel.checkedNodes.some(isInPath)\n)\n\nconst isInPath = (node: CascaderNode) => {\n const { level, uid } = props.node\n return node?.pathNodes[level - 1]?.uid === uid\n}\n\nconst doExpand = () => {\n if (inExpandingPath.value) return\n panel.expandNode(props.node)\n}\n\nconst doCheck = (checked: boolean) => {\n const { node } = props\n if (checked === node.checked) return\n panel.handleCheckChange(node, checked)\n}\n\nconst doLoad = () => {\n panel.lazyLoad(props.node, () => {\n if (!isLeaf.value) doExpand()\n })\n}\n\nconst handleHoverExpand = (e: Event) => {\n if (!isHoverMenu.value) return\n handleExpand()\n !isLeaf.value && emit('expand', e)\n}\n\nconst handleExpand = () => {\n const { node } = props\n // do not exclude leaf node because the menus expanded might have to reset\n if (!expandable.value || node.loading) return\n node.loaded ? doExpand() : doLoad()\n}\n\nconst handleClick = () => {\n if (\n isLeaf.value &&\n !isDisabled.value &&\n !checkStrictly.value &&\n !multiple.value\n ) {\n handleCheck(true)\n } else if (\n ((panel.config.checkOnClickNode &&\n (multiple.value || checkStrictly.value)) ||\n (isLeaf.value && panel.config.checkOnClickLeaf)) &&\n !isDisabled.value\n ) {\n handleSelectCheck(!props.node.checked)\n } else if (!isHoverMenu.value) {\n handleExpand()\n }\n}\n\nconst handleSelectCheck = (checked: CheckboxValueType | undefined) => {\n if (checkStrictly.value) {\n doCheck(checked as boolean)\n if (props.node.loaded) {\n doExpand()\n }\n } else {\n handleCheck(checked as boolean)\n }\n}\n\nconst handleCheck = (checked: boolean) => {\n if (!props.node.loaded) {\n doLoad()\n } else {\n doCheck(checked)\n !checkStrictly.value && doExpand()\n }\n}\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"node2.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/node.vue"],"sourcesContent":["<template>\n <li\n :id=\"`${menuId}-${node.uid}`\"\n role=\"menuitem\"\n :aria-haspopup=\"!isLeaf\"\n :aria-owns=\"isLeaf ? undefined : menuId\"\n :aria-expanded=\"inExpandingPath\"\n :tabindex=\"expandable ? -1 : undefined\"\n :class=\"[\n ns.b(),\n ns.is('selectable', checkStrictly),\n ns.is('active', node.checked),\n ns.is('disabled', !expandable),\n inExpandingPath && 'in-active-path',\n inCheckedPath && 'in-checked-path',\n ]\"\n @mouseenter=\"handleHoverExpand\"\n @focus=\"handleHoverExpand\"\n @click=\"handleClick\"\n >\n <!-- prefix -->\n <el-checkbox\n v-if=\"multiple && showPrefix\"\n :model-value=\"node.checked\"\n :indeterminate=\"node.indeterminate\"\n :disabled=\"isDisabled\"\n @click.stop\n @update:model-value=\"handleSelectCheck\"\n />\n <el-radio\n v-else-if=\"checkStrictly && showPrefix\"\n :model-value=\"checkedNodeId\"\n :label=\"node.uid\"\n :disabled=\"isDisabled\"\n @update:model-value=\"handleSelectCheck\"\n @click.stop\n >\n <!--\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n -->\n <span />\n </el-radio>\n <el-icon v-else-if=\"isLeaf && node.checked\" :class=\"ns.e('prefix')\">\n <check />\n </el-icon>\n\n <!-- content -->\n <node-content :node=\"node\" />\n <!-- postfix -->\n <template v-if=\"!isLeaf\">\n <el-icon v-if=\"node.loading\" :class=\"[ns.is('loading'), ns.e('postfix')]\">\n <loading />\n </el-icon>\n <el-icon v-else :class=\"['arrow-right', ns.e('postfix')]\">\n <arrow-right />\n </el-icon>\n </template>\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport ElRadio from '@element-plus/components/radio'\nimport ElIcon from '@element-plus/components/icon'\nimport { useNamespace } from '@element-plus/hooks'\nimport { ArrowRight, Check, Loading } from '@element-plus/icons-vue'\nimport NodeContent from './node-content'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { CascaderNode } from './types'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\n\ndefineOptions({\n name: 'ElCascaderNode',\n})\n\nconst props = defineProps<{\n node: CascaderNode\n menuId?: string\n}>()\nconst emit = defineEmits(['expand'])\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst ns = useNamespace('cascader-node')\nconst isHoverMenu = computed(() => panel.isHoverMenu)\nconst multiple = computed(() => panel.config.multiple)\nconst checkStrictly = computed(() => panel.config.checkStrictly)\nconst showPrefix = computed(() => panel.config.showPrefix)\nconst checkedNodeId = computed(() => panel.checkedNodes[0]?.uid)\nconst isDisabled = computed(() => props.node.isDisabled)\nconst isLeaf = computed(() => props.node.isLeaf)\nconst expandable = computed(\n () => (checkStrictly.value && !isLeaf.value) || !isDisabled.value\n)\nconst inExpandingPath = computed(() => isInPath(panel.expandingNode!))\n\n// only useful in check-strictly mode\nconst inCheckedPath = computed(\n () => checkStrictly.value && panel.checkedNodes.some(isInPath)\n)\n\nconst isInPath = (node: CascaderNode) => {\n const { level, uid } = props.node\n return node?.pathNodes[level - 1]?.uid === uid\n}\n\nconst doExpand = () => {\n if (inExpandingPath.value) return\n panel.expandNode(props.node)\n}\n\nconst doCheck = (checked: boolean) => {\n const { node } = props\n if (checked === node.checked) return\n panel.handleCheckChange(node, checked)\n}\n\nconst doLoad = () => {\n panel.lazyLoad(props.node, () => {\n if (!isLeaf.value) doExpand()\n })\n}\n\nconst handleHoverExpand = (e: Event) => {\n if (!isHoverMenu.value) return\n handleExpand()\n !isLeaf.value && emit('expand', e)\n}\n\nconst handleExpand = () => {\n const { node } = props\n // do not exclude leaf node because the menus expanded might have to reset\n if (!expandable.value || node.loading) return\n node.loaded ? doExpand() : doLoad()\n}\n\nconst handleClick = () => {\n if (\n isLeaf.value &&\n !isDisabled.value &&\n !checkStrictly.value &&\n !multiple.value\n ) {\n handleCheck(true)\n } else if (\n ((panel.config.checkOnClickNode &&\n (multiple.value || checkStrictly.value)) ||\n (isLeaf.value && panel.config.checkOnClickLeaf)) &&\n !isDisabled.value\n ) {\n handleSelectCheck(!props.node.checked)\n } else if (!isHoverMenu.value) {\n handleExpand()\n }\n}\n\nconst handleSelectCheck = (checked: CheckboxValueType | undefined) => {\n if (checkStrictly.value) {\n doCheck(checked as boolean)\n if (props.node.loaded) {\n doExpand()\n }\n } else {\n handleCheck(checked as boolean)\n }\n}\n\nconst handleCheck = (checked: boolean) => {\n if (!props.node.loaded) {\n doLoad()\n } else {\n doCheck(checked)\n !checkStrictly.value && doExpand()\n }\n}\n</script>\n"],"mappings":""}
@@ -56,6 +56,9 @@ interface ElCascaderPanelContext {
56
56
  isHoverMenu: boolean;
57
57
  initialLoaded: boolean;
58
58
  renderLabelFn?: RenderLabel;
59
+ virtualScroll: boolean;
60
+ itemSize: number;
61
+ height: number;
59
62
  lazyLoad: (node?: Node, cb?: (dataList: CascaderOption[]) => void) => void;
60
63
  expandNode: (node: Node, silent?: boolean) => void;
61
64
  handleCheckChange: (node: Node, checked: boolean, emitClose?: boolean) => void;