@element-plus/nightly 0.0.20260310 → 0.0.20260312

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 (390) hide show
  1. package/attributes.json +1 -1
  2. package/dist/index.full.js +47 -19
  3. package/dist/index.full.min.js +6 -6
  4. package/dist/index.full.min.js.map +1 -1
  5. package/dist/index.full.min.mjs +6 -6
  6. package/dist/index.full.min.mjs.map +1 -1
  7. package/dist/index.full.mjs +47 -19
  8. package/dist/locale/af.js +1 -1
  9. package/dist/locale/af.min.js +1 -1
  10. package/dist/locale/af.min.mjs +1 -1
  11. package/dist/locale/af.mjs +1 -1
  12. package/dist/locale/ar-eg.js +1 -1
  13. package/dist/locale/ar-eg.min.js +1 -1
  14. package/dist/locale/ar-eg.min.mjs +1 -1
  15. package/dist/locale/ar-eg.mjs +1 -1
  16. package/dist/locale/ar.js +1 -1
  17. package/dist/locale/ar.min.js +1 -1
  18. package/dist/locale/ar.min.mjs +1 -1
  19. package/dist/locale/ar.mjs +1 -1
  20. package/dist/locale/az.js +1 -1
  21. package/dist/locale/az.min.js +1 -1
  22. package/dist/locale/az.min.mjs +1 -1
  23. package/dist/locale/az.mjs +1 -1
  24. package/dist/locale/bg.js +1 -1
  25. package/dist/locale/bg.min.js +1 -1
  26. package/dist/locale/bg.min.mjs +1 -1
  27. package/dist/locale/bg.mjs +1 -1
  28. package/dist/locale/bn.js +1 -1
  29. package/dist/locale/bn.min.js +1 -1
  30. package/dist/locale/bn.min.mjs +1 -1
  31. package/dist/locale/bn.mjs +1 -1
  32. package/dist/locale/ca.js +1 -1
  33. package/dist/locale/ca.min.js +1 -1
  34. package/dist/locale/ca.min.mjs +1 -1
  35. package/dist/locale/ca.mjs +1 -1
  36. package/dist/locale/ckb.js +1 -1
  37. package/dist/locale/ckb.min.js +1 -1
  38. package/dist/locale/ckb.min.mjs +1 -1
  39. package/dist/locale/ckb.mjs +1 -1
  40. package/dist/locale/cs.js +1 -1
  41. package/dist/locale/cs.min.js +1 -1
  42. package/dist/locale/cs.min.mjs +1 -1
  43. package/dist/locale/cs.mjs +1 -1
  44. package/dist/locale/da.js +1 -1
  45. package/dist/locale/da.min.js +1 -1
  46. package/dist/locale/da.min.mjs +1 -1
  47. package/dist/locale/da.mjs +1 -1
  48. package/dist/locale/de.js +1 -1
  49. package/dist/locale/de.min.js +1 -1
  50. package/dist/locale/de.min.mjs +1 -1
  51. package/dist/locale/de.mjs +1 -1
  52. package/dist/locale/el.js +1 -1
  53. package/dist/locale/el.min.js +1 -1
  54. package/dist/locale/el.min.mjs +1 -1
  55. package/dist/locale/el.mjs +1 -1
  56. package/dist/locale/en.js +1 -1
  57. package/dist/locale/en.min.js +1 -1
  58. package/dist/locale/en.min.mjs +1 -1
  59. package/dist/locale/en.mjs +1 -1
  60. package/dist/locale/eo.js +1 -1
  61. package/dist/locale/eo.min.js +1 -1
  62. package/dist/locale/eo.min.mjs +1 -1
  63. package/dist/locale/eo.mjs +1 -1
  64. package/dist/locale/es.js +1 -1
  65. package/dist/locale/es.min.js +1 -1
  66. package/dist/locale/es.min.mjs +1 -1
  67. package/dist/locale/es.mjs +1 -1
  68. package/dist/locale/et.js +1 -1
  69. package/dist/locale/et.min.js +1 -1
  70. package/dist/locale/et.min.mjs +1 -1
  71. package/dist/locale/et.mjs +1 -1
  72. package/dist/locale/eu.js +1 -1
  73. package/dist/locale/eu.min.js +1 -1
  74. package/dist/locale/eu.min.mjs +1 -1
  75. package/dist/locale/eu.mjs +1 -1
  76. package/dist/locale/fa.js +1 -1
  77. package/dist/locale/fa.min.js +1 -1
  78. package/dist/locale/fa.min.mjs +1 -1
  79. package/dist/locale/fa.mjs +1 -1
  80. package/dist/locale/fi.js +1 -1
  81. package/dist/locale/fi.min.js +1 -1
  82. package/dist/locale/fi.min.mjs +1 -1
  83. package/dist/locale/fi.mjs +1 -1
  84. package/dist/locale/fr.js +1 -1
  85. package/dist/locale/fr.min.js +1 -1
  86. package/dist/locale/fr.min.mjs +1 -1
  87. package/dist/locale/fr.mjs +1 -1
  88. package/dist/locale/he.js +1 -1
  89. package/dist/locale/he.min.js +1 -1
  90. package/dist/locale/he.min.mjs +1 -1
  91. package/dist/locale/he.mjs +1 -1
  92. package/dist/locale/hi.js +1 -1
  93. package/dist/locale/hi.min.js +1 -1
  94. package/dist/locale/hi.min.mjs +1 -1
  95. package/dist/locale/hi.mjs +1 -1
  96. package/dist/locale/hr.js +1 -1
  97. package/dist/locale/hr.min.js +1 -1
  98. package/dist/locale/hr.min.mjs +1 -1
  99. package/dist/locale/hr.mjs +1 -1
  100. package/dist/locale/hu.js +1 -1
  101. package/dist/locale/hu.min.js +1 -1
  102. package/dist/locale/hu.min.mjs +1 -1
  103. package/dist/locale/hu.mjs +1 -1
  104. package/dist/locale/hy-am.js +1 -1
  105. package/dist/locale/hy-am.min.js +1 -1
  106. package/dist/locale/hy-am.min.mjs +1 -1
  107. package/dist/locale/hy-am.mjs +1 -1
  108. package/dist/locale/id.js +1 -1
  109. package/dist/locale/id.min.js +1 -1
  110. package/dist/locale/id.min.mjs +1 -1
  111. package/dist/locale/id.mjs +1 -1
  112. package/dist/locale/it.js +1 -1
  113. package/dist/locale/it.min.js +1 -1
  114. package/dist/locale/it.min.mjs +1 -1
  115. package/dist/locale/it.mjs +1 -1
  116. package/dist/locale/ja.js +1 -1
  117. package/dist/locale/ja.min.js +1 -1
  118. package/dist/locale/ja.min.mjs +1 -1
  119. package/dist/locale/ja.mjs +1 -1
  120. package/dist/locale/kk.js +1 -1
  121. package/dist/locale/kk.min.js +1 -1
  122. package/dist/locale/kk.min.mjs +1 -1
  123. package/dist/locale/kk.mjs +1 -1
  124. package/dist/locale/km.js +1 -1
  125. package/dist/locale/km.min.js +1 -1
  126. package/dist/locale/km.min.mjs +1 -1
  127. package/dist/locale/km.mjs +1 -1
  128. package/dist/locale/ko.js +1 -1
  129. package/dist/locale/ko.min.js +1 -1
  130. package/dist/locale/ko.min.mjs +1 -1
  131. package/dist/locale/ko.mjs +1 -1
  132. package/dist/locale/ku.js +1 -1
  133. package/dist/locale/ku.min.js +1 -1
  134. package/dist/locale/ku.min.mjs +1 -1
  135. package/dist/locale/ku.mjs +1 -1
  136. package/dist/locale/ky.js +1 -1
  137. package/dist/locale/ky.min.js +1 -1
  138. package/dist/locale/ky.min.mjs +1 -1
  139. package/dist/locale/ky.mjs +1 -1
  140. package/dist/locale/lo.js +1 -1
  141. package/dist/locale/lo.min.js +1 -1
  142. package/dist/locale/lo.min.mjs +1 -1
  143. package/dist/locale/lo.mjs +1 -1
  144. package/dist/locale/lt.js +1 -1
  145. package/dist/locale/lt.min.js +1 -1
  146. package/dist/locale/lt.min.mjs +1 -1
  147. package/dist/locale/lt.mjs +1 -1
  148. package/dist/locale/lv.js +1 -1
  149. package/dist/locale/lv.min.js +1 -1
  150. package/dist/locale/lv.min.mjs +1 -1
  151. package/dist/locale/lv.mjs +1 -1
  152. package/dist/locale/mg.js +1 -1
  153. package/dist/locale/mg.min.js +1 -1
  154. package/dist/locale/mg.min.mjs +1 -1
  155. package/dist/locale/mg.mjs +1 -1
  156. package/dist/locale/mn.js +1 -1
  157. package/dist/locale/mn.min.js +1 -1
  158. package/dist/locale/mn.min.mjs +1 -1
  159. package/dist/locale/mn.mjs +1 -1
  160. package/dist/locale/ms.js +1 -1
  161. package/dist/locale/ms.min.js +1 -1
  162. package/dist/locale/ms.min.mjs +1 -1
  163. package/dist/locale/ms.mjs +1 -1
  164. package/dist/locale/my.js +1 -1
  165. package/dist/locale/my.min.js +1 -1
  166. package/dist/locale/my.min.mjs +1 -1
  167. package/dist/locale/my.mjs +1 -1
  168. package/dist/locale/nb-no.js +1 -1
  169. package/dist/locale/nb-no.min.js +1 -1
  170. package/dist/locale/nb-no.min.mjs +1 -1
  171. package/dist/locale/nb-no.mjs +1 -1
  172. package/dist/locale/nl.js +1 -1
  173. package/dist/locale/nl.min.js +1 -1
  174. package/dist/locale/nl.min.mjs +1 -1
  175. package/dist/locale/nl.mjs +1 -1
  176. package/dist/locale/no.js +1 -1
  177. package/dist/locale/no.min.js +1 -1
  178. package/dist/locale/no.min.mjs +1 -1
  179. package/dist/locale/no.mjs +1 -1
  180. package/dist/locale/pa.js +1 -1
  181. package/dist/locale/pa.min.js +1 -1
  182. package/dist/locale/pa.min.mjs +1 -1
  183. package/dist/locale/pa.mjs +1 -1
  184. package/dist/locale/pl.js +1 -1
  185. package/dist/locale/pl.min.js +1 -1
  186. package/dist/locale/pl.min.mjs +1 -1
  187. package/dist/locale/pl.mjs +1 -1
  188. package/dist/locale/pt-br.js +1 -1
  189. package/dist/locale/pt-br.min.js +1 -1
  190. package/dist/locale/pt-br.min.mjs +1 -1
  191. package/dist/locale/pt-br.mjs +1 -1
  192. package/dist/locale/pt.js +1 -1
  193. package/dist/locale/pt.min.js +1 -1
  194. package/dist/locale/pt.min.mjs +1 -1
  195. package/dist/locale/pt.mjs +1 -1
  196. package/dist/locale/ro.js +1 -1
  197. package/dist/locale/ro.min.js +1 -1
  198. package/dist/locale/ro.min.mjs +1 -1
  199. package/dist/locale/ro.mjs +1 -1
  200. package/dist/locale/ru.js +1 -1
  201. package/dist/locale/ru.min.js +1 -1
  202. package/dist/locale/ru.min.mjs +1 -1
  203. package/dist/locale/ru.mjs +1 -1
  204. package/dist/locale/sk.js +1 -1
  205. package/dist/locale/sk.min.js +1 -1
  206. package/dist/locale/sk.min.mjs +1 -1
  207. package/dist/locale/sk.mjs +1 -1
  208. package/dist/locale/sl.js +1 -1
  209. package/dist/locale/sl.min.js +1 -1
  210. package/dist/locale/sl.min.mjs +1 -1
  211. package/dist/locale/sl.mjs +1 -1
  212. package/dist/locale/sr.js +1 -1
  213. package/dist/locale/sr.min.js +1 -1
  214. package/dist/locale/sr.min.mjs +1 -1
  215. package/dist/locale/sr.mjs +1 -1
  216. package/dist/locale/sv.js +1 -1
  217. package/dist/locale/sv.min.js +1 -1
  218. package/dist/locale/sv.min.mjs +1 -1
  219. package/dist/locale/sv.mjs +1 -1
  220. package/dist/locale/sw.js +1 -1
  221. package/dist/locale/sw.min.js +1 -1
  222. package/dist/locale/sw.min.mjs +1 -1
  223. package/dist/locale/sw.mjs +1 -1
  224. package/dist/locale/ta.js +1 -1
  225. package/dist/locale/ta.min.js +1 -1
  226. package/dist/locale/ta.min.mjs +1 -1
  227. package/dist/locale/ta.mjs +1 -1
  228. package/dist/locale/te.js +1 -1
  229. package/dist/locale/te.min.js +1 -1
  230. package/dist/locale/te.min.mjs +1 -1
  231. package/dist/locale/te.mjs +1 -1
  232. package/dist/locale/th.js +1 -1
  233. package/dist/locale/th.min.js +1 -1
  234. package/dist/locale/th.min.mjs +1 -1
  235. package/dist/locale/th.mjs +1 -1
  236. package/dist/locale/tk.js +1 -1
  237. package/dist/locale/tk.min.js +1 -1
  238. package/dist/locale/tk.min.mjs +1 -1
  239. package/dist/locale/tk.mjs +1 -1
  240. package/dist/locale/tr.js +1 -1
  241. package/dist/locale/tr.min.js +1 -1
  242. package/dist/locale/tr.min.mjs +1 -1
  243. package/dist/locale/tr.mjs +1 -1
  244. package/dist/locale/ug-cn.js +1 -1
  245. package/dist/locale/ug-cn.min.js +1 -1
  246. package/dist/locale/ug-cn.min.mjs +1 -1
  247. package/dist/locale/ug-cn.mjs +1 -1
  248. package/dist/locale/uk.js +1 -1
  249. package/dist/locale/uk.min.js +1 -1
  250. package/dist/locale/uk.min.mjs +1 -1
  251. package/dist/locale/uk.mjs +1 -1
  252. package/dist/locale/uz-uz.js +1 -1
  253. package/dist/locale/uz-uz.min.js +1 -1
  254. package/dist/locale/uz-uz.min.mjs +1 -1
  255. package/dist/locale/uz-uz.mjs +1 -1
  256. package/dist/locale/vi.js +1 -1
  257. package/dist/locale/vi.min.js +1 -1
  258. package/dist/locale/vi.min.mjs +1 -1
  259. package/dist/locale/vi.mjs +1 -1
  260. package/dist/locale/zh-cn.js +1 -1
  261. package/dist/locale/zh-cn.min.js +1 -1
  262. package/dist/locale/zh-cn.min.mjs +1 -1
  263. package/dist/locale/zh-cn.mjs +1 -1
  264. package/dist/locale/zh-hk.js +1 -1
  265. package/dist/locale/zh-hk.min.js +1 -1
  266. package/dist/locale/zh-hk.min.mjs +1 -1
  267. package/dist/locale/zh-hk.mjs +1 -1
  268. package/dist/locale/zh-mo.js +1 -1
  269. package/dist/locale/zh-mo.min.js +1 -1
  270. package/dist/locale/zh-mo.min.mjs +1 -1
  271. package/dist/locale/zh-mo.mjs +1 -1
  272. package/dist/locale/zh-tw.js +1 -1
  273. package/dist/locale/zh-tw.min.js +1 -1
  274. package/dist/locale/zh-tw.min.mjs +1 -1
  275. package/dist/locale/zh-tw.mjs +1 -1
  276. package/es/components/alert/src/alert.vue.d.ts +1 -1
  277. package/es/components/anchor/src/anchor.vue.d.ts +1 -1
  278. package/es/components/autocomplete/src/autocomplete.vue.d.ts +1 -1
  279. package/es/components/badge/src/badge.vue.d.ts +1 -1
  280. package/es/components/carousel/src/carousel.vue.d.ts +1 -1
  281. package/es/components/cascader/src/cascader.vue.d.ts +2 -2
  282. package/es/components/cascader-panel/src/index.vue.d.ts +2 -2
  283. package/es/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
  284. package/es/components/col/src/col.vue.d.ts +1 -1
  285. package/es/components/color-picker-panel/src/color-picker-panel.d.ts +23 -1
  286. package/es/components/color-picker-panel/src/color-picker-panel.mjs +11 -1
  287. package/es/components/color-picker-panel/src/color-picker-panel.mjs.map +1 -1
  288. package/es/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.mjs +10 -4
  289. package/es/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  290. package/es/components/color-picker-panel/src/color-picker-panel2.mjs.map +1 -1
  291. package/es/components/dialog/src/dialog.vue.d.ts +2 -2
  292. package/es/components/drawer/src/drawer.vue.d.ts +2 -2
  293. package/es/components/dropdown/src/dropdown.vue.d.ts +1 -1
  294. package/es/components/image/src/image.vue.d.ts +8 -8
  295. package/es/components/image-viewer/src/image-viewer.vue.d.ts +4 -4
  296. package/es/components/input/src/input.vue.d.ts +6 -2
  297. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs +2 -2
  298. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  299. package/es/components/input/src/input2.mjs.map +1 -1
  300. package/es/components/link/src/link.vue.d.ts +1 -1
  301. package/es/components/mention/src/helper.mjs +1 -1
  302. package/es/components/mention/src/helper.mjs.map +1 -1
  303. package/es/components/mention/src/mention.vue.d.ts +2 -2
  304. package/es/components/message/src/message.d.ts +1 -1
  305. package/es/components/message/src/message.vue.d.ts +4 -4
  306. package/es/components/notification/src/notification.d.ts +1 -1
  307. package/es/components/notification/src/notification.vue.d.ts +2 -2
  308. package/es/components/pagination/src/pagination.d.ts +1 -1
  309. package/es/components/popconfirm/src/popconfirm.vue.d.ts +1 -1
  310. package/es/components/popover/src/popover.vue.d.ts +2 -2
  311. package/es/components/popper/src/content.vue.d.ts +1 -1
  312. package/es/components/radio/src/radio-group.vue.d.ts +1 -1
  313. package/es/components/select/src/select.vue.d.ts +3 -3
  314. package/es/components/select-v2/src/select.vue.d.ts +3 -3
  315. package/es/components/table/src/store/tree.mjs +1 -1
  316. package/es/components/table/src/store/tree.mjs.map +1 -1
  317. package/es/components/table/src/table-column/index.d.ts +1 -1
  318. package/es/components/table/src/table.vue.d.ts +2 -2
  319. package/es/components/tabs/src/tab-nav.mjs +16 -4
  320. package/es/components/tabs/src/tab-nav.mjs.map +1 -1
  321. package/es/components/tooltip/src/content.vue.d.ts +2 -2
  322. package/es/components/tooltip/src/tooltip.vue.d.ts +2 -2
  323. package/es/components/tour/src/tour.vue.d.ts +3 -3
  324. package/es/components/tree-select/src/tree-select.vue.d.ts +3 -3
  325. package/es/components/tree-v2/src/composables/useTree.mjs +5 -5
  326. package/es/components/tree-v2/src/composables/useTree.mjs.map +1 -1
  327. package/es/components/upload/src/upload-content.vue.d.ts +1 -1
  328. package/es/components/upload/src/upload.vue.d.ts +1 -1
  329. package/es/components/watermark/src/watermark.vue.d.ts +1 -1
  330. package/es/version.mjs +1 -1
  331. package/es/version.mjs.map +1 -1
  332. package/lib/components/alert/src/alert.vue.d.ts +1 -1
  333. package/lib/components/anchor/src/anchor.vue.d.ts +1 -1
  334. package/lib/components/autocomplete/src/autocomplete.vue.d.ts +1 -1
  335. package/lib/components/badge/src/badge.vue.d.ts +1 -1
  336. package/lib/components/carousel/src/carousel.vue.d.ts +1 -1
  337. package/lib/components/cascader/src/cascader.vue.d.ts +2 -2
  338. package/lib/components/cascader-panel/src/index.vue.d.ts +2 -2
  339. package/lib/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
  340. package/lib/components/col/src/col.vue.d.ts +1 -1
  341. package/lib/components/color-picker-panel/src/color-picker-panel.d.ts +23 -1
  342. package/lib/components/color-picker-panel/src/color-picker-panel.js +11 -1
  343. package/lib/components/color-picker-panel/src/color-picker-panel.js.map +1 -1
  344. package/lib/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.js +9 -3
  345. package/lib/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  346. package/lib/components/color-picker-panel/src/color-picker-panel2.js.map +1 -1
  347. package/lib/components/dialog/src/dialog.vue.d.ts +2 -2
  348. package/lib/components/drawer/src/drawer.vue.d.ts +2 -2
  349. package/lib/components/dropdown/src/dropdown.vue.d.ts +1 -1
  350. package/lib/components/image/src/image.vue.d.ts +8 -8
  351. package/lib/components/image-viewer/src/image-viewer.vue.d.ts +4 -4
  352. package/lib/components/input/src/input.vue.d.ts +6 -2
  353. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js +2 -2
  354. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  355. package/lib/components/input/src/input2.js.map +1 -1
  356. package/lib/components/link/src/link.vue.d.ts +1 -1
  357. package/lib/components/mention/src/helper.js +1 -1
  358. package/lib/components/mention/src/helper.js.map +1 -1
  359. package/lib/components/mention/src/mention.vue.d.ts +2 -2
  360. package/lib/components/message/src/message.d.ts +1 -1
  361. package/lib/components/message/src/message.vue.d.ts +4 -4
  362. package/lib/components/notification/src/notification.d.ts +1 -1
  363. package/lib/components/notification/src/notification.vue.d.ts +2 -2
  364. package/lib/components/pagination/src/pagination.d.ts +1 -1
  365. package/lib/components/popconfirm/src/popconfirm.vue.d.ts +1 -1
  366. package/lib/components/popover/src/popover.vue.d.ts +2 -2
  367. package/lib/components/popper/src/content.vue.d.ts +1 -1
  368. package/lib/components/radio/src/radio-group.vue.d.ts +1 -1
  369. package/lib/components/select/src/select.vue.d.ts +3 -3
  370. package/lib/components/select-v2/src/select.vue.d.ts +3 -3
  371. package/lib/components/table/src/store/tree.js +1 -1
  372. package/lib/components/table/src/store/tree.js.map +1 -1
  373. package/lib/components/table/src/table-column/index.d.ts +1 -1
  374. package/lib/components/table/src/table.vue.d.ts +2 -2
  375. package/lib/components/tabs/src/tab-nav.js +16 -4
  376. package/lib/components/tabs/src/tab-nav.js.map +1 -1
  377. package/lib/components/tooltip/src/content.vue.d.ts +2 -2
  378. package/lib/components/tooltip/src/tooltip.vue.d.ts +2 -2
  379. package/lib/components/tour/src/tour.vue.d.ts +3 -3
  380. package/lib/components/tree-select/src/tree-select.vue.d.ts +3 -3
  381. package/lib/components/tree-v2/src/composables/useTree.js +5 -5
  382. package/lib/components/tree-v2/src/composables/useTree.js.map +1 -1
  383. package/lib/components/upload/src/upload-content.vue.d.ts +1 -1
  384. package/lib/components/upload/src/upload.vue.d.ts +1 -1
  385. package/lib/components/watermark/src/watermark.vue.d.ts +1 -1
  386. package/lib/version.js +1 -1
  387. package/lib/version.js.map +1 -1
  388. package/package.json +2 -2
  389. package/tags.json +1 -1
  390. package/web-types.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tree.mjs","names":[],"sources":["../../../../../../../packages/components/table/src/store/tree.ts"],"sourcesContent":["import { computed, getCurrentInstance, ref, unref, watch } from 'vue'\nimport { isArray, isUndefined } from '@element-plus/utils'\nimport { getRowIdentity, walkTreeNode } from '../util'\n\nimport type { WatcherPropsData } from '.'\nimport type { DefaultRow, Table, TableProps, TreeNode } from '../table/defaults'\n\nexport interface TreeData extends TreeNode {\n children?: string[]\n lazy?: boolean\n loaded?: boolean\n}\n\nfunction useTree<T extends DefaultRow>(watcherData: WatcherPropsData<T>) {\n const expandRowKeys = ref<Array<string>>([])\n const treeData = ref<Record<string, TreeData>>({})\n const indent = ref(16)\n const lazy = ref(false)\n const lazyTreeNodeMap = ref<Record<string, T[]>>({})\n const lazyColumnIdentifier = ref('hasChildren')\n const childrenColumnName = ref('children')\n const checkStrictly = ref(false)\n const instance = getCurrentInstance() as Table<T>\n const normalizedData = computed(() => {\n if (!watcherData.rowKey.value) return {}\n const data = watcherData.data.value || []\n return normalize(data)\n })\n const normalizedLazyNode = computed(() => {\n const rowKey = watcherData.rowKey.value\n const keys = Object.keys(lazyTreeNodeMap.value)\n const res: Record<string, { children: string[] }> = {}\n if (!keys.length) return res\n keys.forEach((key) => {\n if (lazyTreeNodeMap.value[key].length) {\n const item: (typeof res)[number] = { children: [] }\n lazyTreeNodeMap.value[key].forEach((row) => {\n const currentRowKey = getRowIdentity(row, rowKey)\n item.children.push(currentRowKey)\n if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) {\n res[currentRowKey] = { children: [] }\n }\n })\n res[key] = item\n }\n })\n return res\n })\n\n const normalize = (data: T[]) => {\n const rowKey = watcherData.rowKey.value\n const res = {} as Record<string, TreeData>\n walkTreeNode(\n data,\n (parent, children, level) => {\n const parentId = getRowIdentity(parent, rowKey)\n if (isArray(children)) {\n res[parentId] = {\n children: children.map((row) => getRowIdentity(row, rowKey)),\n level,\n }\n } else if (lazy.value) {\n // 当 children 不存在且 lazy 为 true,该节点即为懒加载的节点\n res[parentId] = {\n children: [],\n lazy: true,\n level,\n }\n }\n },\n childrenColumnName.value,\n lazyColumnIdentifier.value,\n lazy.value\n )\n return res\n }\n\n const updateTreeData = (\n ifChangeExpandRowKeys = false,\n ifExpandAll?: boolean\n ) => {\n ifExpandAll ||= instance.store?.states.defaultExpandAll.value\n const nested = normalizedData.value\n const normalizedLazyNode_ = normalizedLazyNode.value\n const keys = Object.keys(nested)\n const newTreeData: Record<string, TreeData> = {}\n if (keys.length) {\n const oldTreeData = unref(treeData)\n const rootLazyRowKeys: string[] = []\n const getExpanded = (oldValue: TreeData, key: string) => {\n if (ifChangeExpandRowKeys) {\n if (expandRowKeys.value) {\n return ifExpandAll || expandRowKeys.value.includes(key)\n } else {\n return !!(ifExpandAll || oldValue?.expanded)\n }\n } else {\n const included =\n ifExpandAll ||\n (expandRowKeys.value && expandRowKeys.value.includes(key))\n return !!(oldValue?.expanded || included)\n }\n }\n // 合并 expanded 与 display,确保数据刷新后,状态不变\n keys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const newValue = { ...nested[key] }\n newValue.expanded = getExpanded(oldValue, key)\n if (newValue.lazy) {\n const { loaded = false, loading = false } = oldValue || {}\n newValue.loaded = !!loaded\n newValue.loading = !!loading\n rootLazyRowKeys.push(key)\n }\n newTreeData[key] = newValue\n })\n // 根据懒加载数据更新 treeData\n const lazyKeys = Object.keys(normalizedLazyNode_)\n if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) {\n lazyKeys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const lazyNodeChildren = normalizedLazyNode_[key].children\n if (rootLazyRowKeys.includes(key)) {\n // 懒加载的 root 节点,更新一下原有的数据,原来的 children 一定是空数组\n if (newTreeData[key].children?.length !== 0) {\n throw new Error('[ElTable]children must be an empty array.')\n }\n newTreeData[key].children = lazyNodeChildren\n } else {\n const { loaded = false, loading = false } = oldValue || {}\n newTreeData[key] = {\n lazy: true,\n loaded: !!loaded,\n loading: !!loading,\n expanded: getExpanded(oldValue, key),\n children: lazyNodeChildren,\n level: undefined,\n }\n }\n })\n }\n }\n treeData.value = newTreeData\n instance.store?.updateTableScrollY()\n }\n\n watch(\n () => expandRowKeys.value,\n () => {\n updateTreeData(true)\n }\n )\n\n watch(\n () => normalizedData.value,\n () => {\n updateTreeData()\n }\n )\n watch(\n () => normalizedLazyNode.value,\n () => {\n updateTreeData()\n }\n )\n\n const updateTreeExpandKeys = (value: string[]) => {\n expandRowKeys.value = value\n updateTreeData()\n }\n const isUseLazy = (data: TreeData) => {\n return lazy.value && data && 'loaded' in data && !data.loaded\n }\n const toggleTreeExpansion = (row: T, expanded?: boolean) => {\n instance.store.assertRowKey()\n\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = id && treeData.value[id]\n if (id && data && 'expanded' in data) {\n const oldExpanded = data.expanded\n expanded = isUndefined(expanded) ? !data.expanded : expanded\n treeData.value[id].expanded = expanded\n if (oldExpanded !== expanded) {\n instance.emit('expand-change', row, expanded)\n }\n expanded && isUseLazy(data) && loadData(row, id, data)\n instance.store.updateTableScrollY()\n }\n }\n\n const loadOrToggle = (row: T) => {\n instance.store.assertRowKey()\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = treeData.value[id]\n if (isUseLazy(data)) {\n loadData(row, id, data)\n } else {\n toggleTreeExpansion(row, undefined)\n }\n }\n\n const loadData = (row: T, key: string, treeNode: TreeNode) => {\n const { load } = instance.props as unknown as TableProps<T>\n if (load && !treeData.value[key].loaded) {\n treeData.value[key].loading = true\n load(row, treeNode, (data) => {\n if (!isArray(data)) {\n throw new TypeError('[ElTable] data must be an array')\n }\n treeData.value[key].loading = false\n treeData.value[key].loaded = true\n treeData.value[key].expanded = true\n if (data.length) {\n lazyTreeNodeMap.value[key] = data\n }\n instance.emit('expand-change', row, true)\n })\n }\n }\n\n const updateKeyChildren = (key: string, data: T[]) => {\n const { lazy, rowKey } = instance.props as unknown as TableProps<T>\n if (!lazy) return\n if (!rowKey) throw new Error('[Table] rowKey is required in updateKeyChild')\n\n if (lazyTreeNodeMap.value[key]) {\n lazyTreeNodeMap.value[key] = data\n }\n }\n\n return {\n loadData,\n loadOrToggle,\n toggleTreeExpansion,\n updateTreeExpandKeys,\n updateTreeData,\n updateKeyChildren,\n normalize,\n states: {\n expandRowKeys,\n treeData,\n indent,\n lazy,\n lazyTreeNodeMap,\n lazyColumnIdentifier,\n childrenColumnName,\n checkStrictly,\n },\n }\n}\n\nexport default useTree\n"],"mappings":";;;;;AAaA,SAAS,QAA8B,aAAkC;CACvE,MAAM,gBAAgB,IAAmB,EAAE,CAAC;CAC5C,MAAM,WAAW,IAA8B,EAAE,CAAC;CAClD,MAAM,SAAS,IAAI,GAAG;CACtB,MAAM,OAAO,IAAI,MAAM;CACvB,MAAM,kBAAkB,IAAyB,EAAE,CAAC;CACpD,MAAM,uBAAuB,IAAI,cAAc;CAC/C,MAAM,qBAAqB,IAAI,WAAW;CAC1C,MAAM,gBAAgB,IAAI,MAAM;CAChC,MAAM,WAAW,oBAAoB;CACrC,MAAM,iBAAiB,eAAe;AACpC,MAAI,CAAC,YAAY,OAAO,MAAO,QAAO,EAAE;AAExC,SAAO,UADM,YAAY,KAAK,SAAS,EAAE,CACnB;GACtB;CACF,MAAM,qBAAqB,eAAe;EACxC,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,OAAO,OAAO,KAAK,gBAAgB,MAAM;EAC/C,MAAM,MAA8C,EAAE;AACtD,MAAI,CAAC,KAAK,OAAQ,QAAO;AACzB,OAAK,SAAS,QAAQ;AACpB,OAAI,gBAAgB,MAAM,KAAK,QAAQ;IACrC,MAAM,OAA6B,EAAE,UAAU,EAAE,EAAE;AACnD,oBAAgB,MAAM,KAAK,SAAS,QAAQ;KAC1C,MAAM,gBAAgB,eAAe,KAAK,OAAO;AACjD,UAAK,SAAS,KAAK,cAAc;AACjC,SAAI,IAAI,qBAAqB,UAAU,CAAC,IAAI,eAC1C,KAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE;MAEvC;AACF,QAAI,OAAO;;IAEb;AACF,SAAO;GACP;CAEF,MAAM,aAAa,SAAc;EAC/B,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,MAAM,EAAE;AACd,eACE,OACC,QAAQ,UAAU,UAAU;GAC3B,MAAM,WAAW,eAAe,QAAQ,OAAO;AAC/C,OAAI,QAAQ,SAAS,CACnB,KAAI,YAAY;IACd,UAAU,SAAS,KAAK,QAAQ,eAAe,KAAK,OAAO,CAAC;IAC5D;IACD;YACQ,KAAK,MAEd,KAAI,YAAY;IACd,UAAU,EAAE;IACZ,MAAM;IACN;IACD;KAGL,mBAAmB,OACnB,qBAAqB,OACrB,KAAK,MACN;AACD,SAAO;;CAGT,MAAM,kBACJ,wBAAwB,OACxB,gBACG;AACH,kBAAgB,SAAS,OAAO,OAAO,iBAAiB;EACxD,MAAM,SAAS,eAAe;EAC9B,MAAM,sBAAsB,mBAAmB;EAC/C,MAAM,OAAO,OAAO,KAAK,OAAO;EAChC,MAAM,cAAwC,EAAE;AAChD,MAAI,KAAK,QAAQ;GACf,MAAM,cAAc,MAAM,SAAS;GACnC,MAAM,kBAA4B,EAAE;GACpC,MAAM,eAAe,UAAoB,QAAgB;AACvD,QAAI,sBACF,KAAI,cAAc,MAChB,QAAO,eAAe,cAAc,MAAM,SAAS,IAAI;QAEvD,QAAO,CAAC,EAAE,eAAe,UAAU;SAEhC;KACL,MAAM,WACJ,eACC,cAAc,SAAS,cAAc,MAAM,SAAS,IAAI;AAC3D,YAAO,CAAC,EAAE,UAAU,YAAY;;;AAIpC,QAAK,SAAS,QAAQ;IACpB,MAAM,WAAW,YAAY;IAC7B,MAAM,WAAW,EAAE,GAAG,OAAO,MAAM;AACnC,aAAS,WAAW,YAAY,UAAU,IAAI;AAC9C,QAAI,SAAS,MAAM;KACjB,MAAM,EAAE,SAAS,OAAO,UAAU,UAAU,YAAY,EAAE;AAC1D,cAAS,SAAS,CAAC,CAAC;AACpB,cAAS,UAAU,CAAC,CAAC;AACrB,qBAAgB,KAAK,IAAI;;AAE3B,gBAAY,OAAO;KACnB;GAEF,MAAM,WAAW,OAAO,KAAK,oBAAoB;AACjD,OAAI,KAAK,SAAS,SAAS,UAAU,gBAAgB,OACnD,UAAS,SAAS,QAAQ;IACxB,MAAM,WAAW,YAAY;IAC7B,MAAM,mBAAmB,oBAAoB,KAAK;AAClD,QAAI,gBAAgB,SAAS,IAAI,EAAE;AAEjC,SAAI,YAAY,KAAK,UAAU,WAAW,EACxC,OAAM,IAAI,MAAM,4CAA4C;AAE9D,iBAAY,KAAK,WAAW;WACvB;KACL,MAAM,EAAE,SAAS,OAAO,UAAU,UAAU,YAAY,EAAE;AAC1D,iBAAY,OAAO;MACjB,MAAM;MACN,QAAQ,CAAC,CAAC;MACV,SAAS,CAAC,CAAC;MACX,UAAU,YAAY,UAAU,IAAI;MACpC,UAAU;MACV,OAAO;MACR;;KAEH;;AAGN,WAAS,QAAQ;AACjB,WAAS,OAAO,oBAAoB;;AAGtC,aACQ,cAAc,aACd;AACJ,iBAAe,KAAK;GAEvB;AAED,aACQ,eAAe,aACf;AACJ,kBAAgB;GAEnB;AACD,aACQ,mBAAmB,aACnB;AACJ,kBAAgB;GAEnB;CAED,MAAM,wBAAwB,UAAoB;AAChD,gBAAc,QAAQ;AACtB,kBAAgB;;CAElB,MAAM,aAAa,SAAmB;AACpC,SAAO,KAAK,SAAS,QAAQ,YAAY,QAAQ,CAAC,KAAK;;CAEzD,MAAM,uBAAuB,KAAQ,aAAuB;AAC1D,WAAS,MAAM,cAAc;EAE7B,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,KAAK,eAAe,KAAK,OAAO;EACtC,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,MAAI,MAAM,QAAQ,cAAc,MAAM;GACpC,MAAM,cAAc,KAAK;AACzB,cAAW,YAAY,SAAS,GAAG,CAAC,KAAK,WAAW;AACpD,YAAS,MAAM,IAAI,WAAW;AAC9B,OAAI,gBAAgB,SAClB,UAAS,KAAK,iBAAiB,KAAK,SAAS;AAE/C,eAAY,UAAU,KAAK,IAAI,SAAS,KAAK,IAAI,KAAK;AACtD,YAAS,MAAM,oBAAoB;;;CAIvC,MAAM,gBAAgB,QAAW;AAC/B,WAAS,MAAM,cAAc;EAC7B,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,KAAK,eAAe,KAAK,OAAO;EACtC,MAAM,OAAO,SAAS,MAAM;AAC5B,MAAI,UAAU,KAAK,CACjB,UAAS,KAAK,IAAI,KAAK;MAEvB,qBAAoB,KAAK,OAAU;;CAIvC,MAAM,YAAY,KAAQ,KAAa,aAAuB;EAC5D,MAAM,EAAE,SAAS,SAAS;AAC1B,MAAI,QAAQ,CAAC,SAAS,MAAM,KAAK,QAAQ;AACvC,YAAS,MAAM,KAAK,UAAU;AAC9B,QAAK,KAAK,WAAW,SAAS;AAC5B,QAAI,CAAC,QAAQ,KAAK,CAChB,OAAM,IAAI,UAAU,kCAAkC;AAExD,aAAS,MAAM,KAAK,UAAU;AAC9B,aAAS,MAAM,KAAK,SAAS;AAC7B,aAAS,MAAM,KAAK,WAAW;AAC/B,QAAI,KAAK,OACP,iBAAgB,MAAM,OAAO;AAE/B,aAAS,KAAK,iBAAiB,KAAK,KAAK;KACzC;;;CAIN,MAAM,qBAAqB,KAAa,SAAc;EACpD,MAAM,EAAE,MAAM,WAAW,SAAS;AAClC,MAAI,CAAC,KAAM;AACX,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,+CAA+C;AAE5E,MAAI,gBAAgB,MAAM,KACxB,iBAAgB,MAAM,OAAO;;AAIjC,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ;GACN;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF"}
1
+ {"version":3,"file":"tree.mjs","names":[],"sources":["../../../../../../../packages/components/table/src/store/tree.ts"],"sourcesContent":["import { computed, getCurrentInstance, ref, unref, watch } from 'vue'\nimport { isArray, isUndefined } from '@element-plus/utils'\nimport { getRowIdentity, walkTreeNode } from '../util'\n\nimport type { WatcherPropsData } from '.'\nimport type { DefaultRow, Table, TableProps, TreeNode } from '../table/defaults'\n\nexport interface TreeData extends TreeNode {\n children?: string[]\n lazy?: boolean\n loaded?: boolean\n}\n\nfunction useTree<T extends DefaultRow>(watcherData: WatcherPropsData<T>) {\n const expandRowKeys = ref<Array<string>>([])\n const treeData = ref<Record<string, TreeData>>({})\n const indent = ref(16)\n const lazy = ref(false)\n const lazyTreeNodeMap = ref<Record<string, T[]>>({})\n const lazyColumnIdentifier = ref('hasChildren')\n const childrenColumnName = ref('children')\n const checkStrictly = ref(false)\n const instance = getCurrentInstance() as Table<T>\n const normalizedData = computed(() => {\n if (!watcherData.rowKey.value) return {}\n const data = watcherData.data.value || []\n return normalize(data)\n })\n const normalizedLazyNode = computed(() => {\n const rowKey = watcherData.rowKey.value\n const keys = Object.keys(lazyTreeNodeMap.value)\n const res: Record<string, { children: string[] }> = {}\n if (!keys.length) return res\n keys.forEach((key) => {\n if (lazyTreeNodeMap.value[key].length) {\n const item: (typeof res)[number] = { children: [] }\n lazyTreeNodeMap.value[key].forEach((row) => {\n const currentRowKey = getRowIdentity(row, rowKey)\n item.children.push(currentRowKey)\n if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) {\n res[currentRowKey] = { children: [] }\n }\n })\n res[key] = item\n }\n })\n return res\n })\n\n const normalize = (data: T[]) => {\n const rowKey = watcherData.rowKey.value\n const res = {} as Record<string, TreeData>\n walkTreeNode(\n data,\n (parent, children, level) => {\n const parentId = getRowIdentity(parent, rowKey)\n if (isArray(children)) {\n res[parentId] = {\n children: children.map((row) => getRowIdentity(row, rowKey)),\n level,\n }\n } else if (lazy.value) {\n // 当 children 不存在且 lazy 为 true,该节点即为懒加载的节点\n res[parentId] = {\n children: [],\n lazy: true,\n level,\n }\n }\n },\n childrenColumnName.value,\n lazyColumnIdentifier.value,\n lazy.value\n )\n return res\n }\n\n const updateTreeData = (\n ifChangeExpandRowKeys = false,\n ifExpandAll?: boolean\n ) => {\n ifExpandAll ||= instance.store?.states.defaultExpandAll.value\n const nested = normalizedData.value\n const normalizedLazyNode_ = normalizedLazyNode.value\n const keys = Object.keys(nested)\n const newTreeData: Record<string, TreeData> = {}\n if (keys.length) {\n const oldTreeData = unref(treeData)\n const rootLazyRowKeys: string[] = []\n const getExpanded = (oldValue: TreeData, key: string) => {\n if (ifChangeExpandRowKeys) {\n if (expandRowKeys.value) {\n return ifExpandAll || expandRowKeys.value.includes(key)\n } else {\n return !!(ifExpandAll || oldValue?.expanded)\n }\n } else {\n const included =\n ifExpandAll ||\n (expandRowKeys.value && expandRowKeys.value.includes(key))\n return !!(oldValue?.expanded || included)\n }\n }\n // 合并 expanded 与 display,确保数据刷新后,状态不变\n keys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const newValue = { ...nested[key] }\n newValue.expanded = getExpanded(oldValue, key)\n if (newValue.lazy) {\n const { loaded = false, loading = false } = oldValue || {}\n newValue.loaded = !!loaded\n newValue.loading = !!loading\n rootLazyRowKeys.push(key)\n }\n newTreeData[key] = newValue\n })\n // 根据懒加载数据更新 treeData\n const lazyKeys = Object.keys(normalizedLazyNode_)\n if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) {\n lazyKeys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const lazyNodeChildren = normalizedLazyNode_[key].children\n if (rootLazyRowKeys.includes(key)) {\n // 懒加载的 root 节点,更新一下原有的数据,原来的 children 一定是空数组\n if (newTreeData[key].children?.length !== 0) {\n throw new Error('[ElTable]children must be an empty array.')\n }\n newTreeData[key].children = lazyNodeChildren\n } else {\n const { loaded = false, loading = false } = oldValue || {}\n newTreeData[key] = {\n lazy: true,\n loaded: !!loaded,\n loading: !!loading,\n expanded: getExpanded(oldValue, key),\n children: lazyNodeChildren,\n level: undefined,\n }\n }\n })\n }\n }\n treeData.value = newTreeData\n instance.store?.updateTableScrollY()\n }\n\n watch(\n () => expandRowKeys.value,\n () => {\n updateTreeData(true)\n },\n { deep: true }\n )\n\n watch(\n () => normalizedData.value,\n () => {\n updateTreeData()\n }\n )\n watch(\n () => normalizedLazyNode.value,\n () => {\n updateTreeData()\n }\n )\n\n const updateTreeExpandKeys = (value: string[]) => {\n expandRowKeys.value = value\n updateTreeData()\n }\n const isUseLazy = (data: TreeData) => {\n return lazy.value && data && 'loaded' in data && !data.loaded\n }\n const toggleTreeExpansion = (row: T, expanded?: boolean) => {\n instance.store.assertRowKey()\n\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = id && treeData.value[id]\n if (id && data && 'expanded' in data) {\n const oldExpanded = data.expanded\n expanded = isUndefined(expanded) ? !data.expanded : expanded\n treeData.value[id].expanded = expanded\n if (oldExpanded !== expanded) {\n instance.emit('expand-change', row, expanded)\n }\n expanded && isUseLazy(data) && loadData(row, id, data)\n instance.store.updateTableScrollY()\n }\n }\n\n const loadOrToggle = (row: T) => {\n instance.store.assertRowKey()\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = treeData.value[id]\n if (isUseLazy(data)) {\n loadData(row, id, data)\n } else {\n toggleTreeExpansion(row, undefined)\n }\n }\n\n const loadData = (row: T, key: string, treeNode: TreeNode) => {\n const { load } = instance.props as unknown as TableProps<T>\n if (load && !treeData.value[key].loaded) {\n treeData.value[key].loading = true\n load(row, treeNode, (data) => {\n if (!isArray(data)) {\n throw new TypeError('[ElTable] data must be an array')\n }\n treeData.value[key].loading = false\n treeData.value[key].loaded = true\n treeData.value[key].expanded = true\n if (data.length) {\n lazyTreeNodeMap.value[key] = data\n }\n instance.emit('expand-change', row, true)\n })\n }\n }\n\n const updateKeyChildren = (key: string, data: T[]) => {\n const { lazy, rowKey } = instance.props as unknown as TableProps<T>\n if (!lazy) return\n if (!rowKey) throw new Error('[Table] rowKey is required in updateKeyChild')\n\n if (lazyTreeNodeMap.value[key]) {\n lazyTreeNodeMap.value[key] = data\n }\n }\n\n return {\n loadData,\n loadOrToggle,\n toggleTreeExpansion,\n updateTreeExpandKeys,\n updateTreeData,\n updateKeyChildren,\n normalize,\n states: {\n expandRowKeys,\n treeData,\n indent,\n lazy,\n lazyTreeNodeMap,\n lazyColumnIdentifier,\n childrenColumnName,\n checkStrictly,\n },\n }\n}\n\nexport default useTree\n"],"mappings":"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"}
@@ -122,7 +122,7 @@ declare const _default: vue.DefineComponent<{
122
122
  minWidth: string | number;
123
123
  width: string | number;
124
124
  resizable: boolean;
125
- showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "effect" | "offset" | "appendTo" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined;
125
+ showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined;
126
126
  sortOrders: (TableSortOrder | null)[];
127
127
  sortable: string | boolean;
128
128
  reserveSelection: boolean;
@@ -734,7 +734,7 @@ declare const __VLS_export: vue.DefineComponent<{
734
734
  computedSumText: vue.ComputedRef<string>;
735
735
  computedEmptyText: vue.ComputedRef<string>;
736
736
  computedTooltipEffect: vue.ComputedRef<string | undefined>;
737
- computedTooltipOptions: vue.ComputedRef<Partial<Pick<UseTooltipProps, "effect" | "offset" | "appendTo" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined>;
737
+ computedTooltipOptions: vue.ComputedRef<Partial<Pick<UseTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined>;
738
738
  tableLayout: vue.ComputedRef<"fixed" | "auto">;
739
739
  scrollbarViewStyle: {
740
740
  display: string;
@@ -895,7 +895,7 @@ declare const __VLS_export: vue.DefineComponent<{
895
895
  allowDragLastColumn: boolean;
896
896
  stripe: boolean;
897
897
  treeProps: TreeProps | undefined;
898
- showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "effect" | "offset" | "appendTo" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined;
898
+ showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined;
899
899
  showHeader: boolean;
900
900
  showSummary: boolean;
901
901
  highlightCurrentRow: boolean;
@@ -65,11 +65,16 @@ const TabNav = /* @__PURE__ */ defineComponent({
65
65
  const navOffset = ref(0);
66
66
  const isFocus = ref(false);
67
67
  const focusable = ref(true);
68
+ const isWheelScrolling = ref(false);
68
69
  const tracker = shallowRef();
69
70
  const isHorizontal = computed(() => ["top", "bottom"].includes(rootTabs.props.tabPosition));
70
71
  const sizeName = computed(() => isHorizontal.value ? "width" : "height");
71
72
  const navStyle = computed(() => {
72
- return { transform: `translate${sizeName.value === "width" ? "X" : "Y"}(-${navOffset.value}px)` };
73
+ const dir = sizeName.value === "width" ? "X" : "Y";
74
+ return {
75
+ transition: isWheelScrolling.value ? "none" : void 0,
76
+ transform: `translate${dir}(-${navOffset.value}px)`
77
+ };
73
78
  });
74
79
  const { width: navContainerWidth, height: navContainerHeight } = useElementSize(navScroll$);
75
80
  const { width: navWidth, height: navHeight } = useElementSize(nav$, {
@@ -85,6 +90,13 @@ const TabNav = /* @__PURE__ */ defineComponent({
85
90
  }, (offset) => {
86
91
  navOffset.value = clamp$1(navOffset.value + offset, 0, navSize.value - navContainerSize.value);
87
92
  });
93
+ const handleWheel = (event) => {
94
+ isWheelScrolling.value = true;
95
+ onWheel(event);
96
+ rAF(() => {
97
+ isWheelScrolling.value = false;
98
+ });
99
+ };
88
100
  const scrollPrev = () => {
89
101
  if (!navScroll$.value) return;
90
102
  const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];
@@ -125,8 +137,8 @@ const TabNav = /* @__PURE__ */ defineComponent({
125
137
  const update = () => {
126
138
  if (!nav$.value || !navScroll$.value) return;
127
139
  props.stretch && tabBarRef.value?.update();
128
- const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];
129
- const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];
140
+ const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
141
+ const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
130
142
  const currentOffset = navOffset.value;
131
143
  if (containerSize < navSize) {
132
144
  scrollable.value = scrollable.value || {};
@@ -261,7 +273,7 @@ const TabNav = /* @__PURE__ */ defineComponent({
261
273
  "style": navStyle.value,
262
274
  "role": "tablist",
263
275
  "onKeydown": changeTab,
264
- "onWheel": onWheel
276
+ "onWheel": handleWheel
265
277
  }, [...[!props.type ? createVNode(tab_bar_default, {
266
278
  "ref": tabBarRef,
267
279
  "tabs": [...props.panes],
@@ -1 +1 @@
1
- {"version":3,"file":"tab-nav.mjs","names":["computed","defineComponent","inject","nextTick","onMounted","onUpdated","ref","shallowRef","triggerRef","watch","createVNode","_createVNode","useDocumentVisibility","useElementSize","useResizeObserver","useWindowFocus","buildProps","capitalize","definePropType","getEventCode","mutable","rAF","throwError","EVENT_CODE","ElIcon","ArrowLeft","ArrowRight","Close","useNamespace","useWheel","clamp","TabBar","tabsRootContextKey","tabNavProps","panes","type","Array","default","currentName","String","Number","editable","Boolean","values","stretch","tabindex","undefined","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","name","props","emits","setup","expose","emit","rootTabs","ns","visibility","focused","navScroll$","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","tracker","isHorizontal","includes","tabPosition","sizeName","value","navStyle","dir","transform","width","navContainerWidth","height","navContainerHeight","navWidth","navHeight","box","navContainerSize","navSize","onWheel","atStartEdge","atEndEdge","layout","offset","scrollPrev","containerSize","currentOffset","newOffset","scrollNext","scrollToActiveTab","nav","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","offsetHeight","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","event","code","step","up","down","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","setRefs","el","key","focusActiveTab","setTimeout","tabListRef","scheduleRender","scrollBtn","e","is","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","tabLabelContent","slots","label","active","onFocus","onBlur","delete","backspace"],"sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n triggerRef,\n watch,\n} from 'vue'\nimport {\n useDocumentVisibility,\n useElementSize,\n useResizeObserver,\n useWindowFocus,\n} from '@vueuse/core'\nimport {\n buildProps,\n capitalize,\n definePropType,\n getEventCode,\n mutable,\n rAF,\n throwError,\n} from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport useWheel from '@element-plus/components/virtual-list/src/hooks/use-wheel'\nimport { clamp } from 'lodash-unified'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type {\n CSSProperties,\n ComponentPublicInstance,\n ExtractPropTypes,\n ExtractPublicPropTypes,\n} from 'vue'\nimport type { TabBarInstance } from './tab-bar'\nimport type { TabPaneName, TabsPaneContext } from './constants'\n\ninterface Scrollable {\n next?: boolean\n prev?: number\n}\n\nexport const tabNavProps = buildProps({\n panes: {\n type: definePropType<TabsPaneContext[]>(Array),\n default: () => mutable([] as const),\n },\n currentName: {\n type: [String, Number],\n default: '',\n },\n editable: Boolean,\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\n /**\n * @description tab-nav tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n} as const)\n\nexport const tabNavEmits = {\n tabClick: (tab: TabsPaneContext, tabName: TabPaneName, ev: Event) =>\n ev instanceof Event,\n tabRemove: (tab: TabsPaneContext, ev: Event) => ev instanceof Event,\n}\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavPropsPublic = ExtractPublicPropTypes<typeof tabNavProps>\nexport type TabNavEmits = typeof tabNavEmits\n\nconst COMPONENT_NAME = 'ElTabNav'\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, { expose, emit }) {\n const rootTabs = inject(tabsRootContextKey)\n if (!rootTabs) throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`)\n\n const ns = useNamespace('tabs')\n const visibility = useDocumentVisibility()\n const focused = useWindowFocus()\n\n const navScroll$ = ref<HTMLDivElement>()\n const nav$ = ref<HTMLDivElement>()\n const el$ = ref<HTMLDivElement>()\n const tabRefsMap = ref<{ [key: TabPaneName]: HTMLDivElement }>({})\n\n const tabBarRef = ref<TabBarInstance>()\n\n const scrollable = ref<false | Scrollable>(false)\n const navOffset = ref(0)\n const isFocus = ref(false)\n const focusable = ref(true)\n const tracker = shallowRef()\n\n const isHorizontal = computed(() =>\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n )\n\n const sizeName = computed(() => (isHorizontal.value ? 'width' : 'height'))\n const navStyle = computed<CSSProperties>(() => {\n const dir = sizeName.value === 'width' ? 'X' : 'Y'\n return {\n transform: `translate${dir}(-${navOffset.value}px)`,\n }\n })\n\n const { width: navContainerWidth, height: navContainerHeight } =\n useElementSize(navScroll$)\n const { width: navWidth, height: navHeight } = useElementSize(\n nav$,\n { width: 0, height: 0 },\n { box: 'border-box' }\n )\n\n const navContainerSize = computed(() =>\n isHorizontal.value ? navContainerWidth.value : navContainerHeight.value\n )\n const navSize = computed(() =>\n isHorizontal.value ? navWidth.value : navHeight.value\n )\n\n const { onWheel } = useWheel(\n {\n atStartEdge: computed(() => navOffset.value <= 0),\n atEndEdge: computed(\n () => navSize.value - navOffset.value <= navContainerSize.value\n ),\n layout: computed(() =>\n isHorizontal.value ? 'horizontal' : 'vertical'\n ),\n },\n (offset) => {\n navOffset.value = clamp(\n navOffset.value + offset,\n 0,\n navSize.value - navContainerSize.value\n )\n }\n )\n\n const scrollPrev = () => {\n if (!navScroll$.value) return\n\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (!currentOffset) return\n\n const newOffset =\n currentOffset > containerSize ? currentOffset - containerSize : 0\n\n navOffset.value = newOffset\n }\n\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (navSize - currentOffset <= containerSize) return\n\n const newOffset =\n navSize - currentOffset > containerSize * 2\n ? currentOffset + containerSize\n : navSize - containerSize\n\n navOffset.value = newOffset\n }\n\n const scrollToActiveTab = async () => {\n const nav = nav$.value\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n if (!activeTab) return\n\n const navScroll = navScroll$.value\n\n const activeTabBounding = activeTab.getBoundingClientRect()\n const navScrollBounding = navScroll.getBoundingClientRect()\n const maxOffset = isHorizontal.value\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height\n const currentOffset = navOffset.value\n let newOffset = currentOffset\n\n if (isHorizontal.value) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset =\n currentOffset - (navScrollBounding.left - activeTabBounding.left)\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset =\n currentOffset + activeTabBounding.right - navScrollBounding.right\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset =\n currentOffset - (navScrollBounding.top - activeTabBounding.top)\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset =\n currentOffset +\n (activeTabBounding.bottom - navScrollBounding.bottom)\n }\n }\n newOffset = Math.max(newOffset, 0)\n navOffset.value = Math.min(newOffset, maxOffset)\n }\n\n const update = () => {\n if (!nav$.value || !navScroll$.value) return\n\n props.stretch && tabBarRef.value?.update()\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (containerSize < navSize) {\n scrollable.value = scrollable.value || {}\n scrollable.value.prev = currentOffset\n scrollable.value.next = currentOffset + containerSize < navSize\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize\n }\n } else {\n scrollable.value = false\n if (currentOffset > 0) {\n navOffset.value = 0\n }\n }\n }\n\n const changeTab = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let step = 0\n\n switch (code) {\n case EVENT_CODE.left:\n case EVENT_CODE.up:\n step = -1\n break\n case EVENT_CODE.right:\n case EVENT_CODE.down:\n step = 1\n break\n default:\n return\n }\n\n const tabList = Array.from(\n (\n event.currentTarget as HTMLDivElement\n ).querySelectorAll<HTMLDivElement>('[role=tab]:not(.is-disabled)')\n )\n const currentIndex = tabList.indexOf(event.target as HTMLDivElement)\n let nextIndex = currentIndex + step\n\n if (nextIndex < 0) {\n nextIndex = tabList.length - 1\n } else if (nextIndex >= tabList.length) {\n nextIndex = 0\n }\n\n tabList[nextIndex].focus({ preventScroll: true }) // 改变焦点元素\n tabList[nextIndex].click() // 选中下一个tab\n setFocus()\n }\n\n const setFocus = () => {\n if (focusable.value) isFocus.value = true\n }\n const removeFocus = () => (isFocus.value = false)\n\n const setRefs = (\n el: Element | ComponentPublicInstance | null,\n key: TabPaneName\n ) => {\n tabRefsMap.value[key] = el as HTMLDivElement\n }\n\n const focusActiveTab = async () => {\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n activeTab?.focus({ preventScroll: true })\n }\n\n watch(visibility, (visibility) => {\n if (visibility === 'hidden') {\n focusable.value = false\n } else if (visibility === 'visible') {\n setTimeout(() => (focusable.value = true), 50)\n }\n })\n watch(focused, (focused) => {\n if (focused) {\n setTimeout(() => (focusable.value = true), 50)\n } else {\n focusable.value = false\n }\n })\n\n useResizeObserver(el$, () => {\n rAF(update)\n })\n\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0))\n onUpdated(() => update())\n\n expose({\n scrollToActiveTab,\n removeFocus,\n focusActiveTab,\n tabListRef: nav$,\n tabBarRef,\n scheduleRender: () => triggerRef(tracker),\n })\n\n return () => {\n const scrollBtn = scrollable.value\n ? [\n <span\n class={[\n ns.e('nav-prev'),\n ns.is('disabled', !scrollable.value.prev),\n ]}\n onClick={scrollPrev}\n >\n <ElIcon>\n <ArrowLeft />\n </ElIcon>\n </span>,\n <span\n class={[\n ns.e('nav-next'),\n ns.is('disabled', !scrollable.value.next),\n ]}\n onClick={scrollNext}\n >\n <ElIcon>\n <ArrowRight />\n </ElIcon>\n </span>,\n ]\n : null\n\n const tabs = props.panes.map((pane, index) => {\n const uid = pane.uid\n const disabled = pane.props.disabled\n const tabName = pane.props.name ?? pane.index ?? `${index}`\n const closable =\n !disabled &&\n (pane.isClosable || (pane.props.closable !== false && props.editable))\n pane.index = `${index}`\n\n const btnClose = closable ? (\n <ElIcon\n class=\"is-icon-close\"\n // `onClick` not exist when generate dts\n\n // @ts-ignore\n onClick={(ev: MouseEvent) => emit('tabRemove', pane, ev)}\n >\n <Close />\n </ElIcon>\n ) : null\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label\n const tabindex =\n !disabled && pane.active\n ? (props.tabindex ?? rootTabs.props.tabindex)\n : -1\n\n return (\n <div\n ref={(el) => setRefs(el, tabName)}\n class={[\n ns.e('item'),\n ns.is(rootTabs.props.tabPosition),\n ns.is('active', pane.active),\n ns.is('disabled', disabled),\n ns.is('closable', closable),\n ns.is('focus', isFocus.value),\n ]}\n id={`tab-${tabName}`}\n key={`tab-${uid}`}\n aria-controls={`pane-${tabName}`}\n role=\"tab\"\n aria-selected={pane.active}\n tabindex={tabindex}\n onFocus={() => setFocus()}\n onBlur={() => removeFocus()}\n onClick={(ev: MouseEvent) => {\n removeFocus()\n emit('tabClick', pane, tabName, ev)\n }}\n onKeydown={(ev: KeyboardEvent) => {\n const code = getEventCode(ev)\n if (\n closable &&\n (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', pane, ev)\n }\n }}\n >\n {...[tabLabelContent, btnClose]}\n </div>\n )\n })\n\n // By tracking the value property, we can schedule a job to re-render `TabNav` when needed.\n // Unlike `instance.update`, the scheduler ensures the job is queued only once even if we trigger it multiple times.\n tracker.value\n\n return (\n <div\n ref={el$}\n class={[\n ns.e('nav-wrap'),\n ns.is('scrollable', !!scrollable.value),\n ns.is(rootTabs.props.tabPosition),\n ]}\n >\n {scrollBtn}\n <div class={ns.e('nav-scroll')} ref={navScroll$}>\n {props.panes.length > 0 ? (\n <div\n class={[\n ns.e('nav'),\n ns.is(rootTabs.props.tabPosition),\n ns.is(\n 'stretch',\n props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ),\n ]}\n ref={nav$}\n style={navStyle.value}\n role=\"tablist\"\n onKeydown={changeTab}\n onWheel={onWheel}\n >\n {...[\n !props.type ? (\n <TabBar\n ref={tabBarRef}\n tabs={[...props.panes]}\n tabRefs={tabRefsMap.value}\n />\n ) : null,\n tabs,\n ]}\n </div>\n ) : null}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n scrollToActiveTab: () => Promise<void>\n removeFocus: () => void\n focusActiveTab: () => void\n scheduleRender: () => void\n tabListRef: HTMLDivElement | undefined\n tabBarRef: TabBarInstance | undefined\n}\n\nexport default TabNav\n"],"mappings":"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"}
1
+ {"version":3,"file":"tab-nav.mjs","names":["computed","defineComponent","inject","nextTick","onMounted","onUpdated","ref","shallowRef","triggerRef","watch","createVNode","_createVNode","useDocumentVisibility","useElementSize","useResizeObserver","useWindowFocus","buildProps","capitalize","definePropType","getEventCode","mutable","rAF","throwError","EVENT_CODE","ElIcon","ArrowLeft","ArrowRight","Close","useNamespace","useWheel","clamp","TabBar","tabsRootContextKey","tabNavProps","panes","type","Array","default","currentName","String","Number","editable","Boolean","values","stretch","tabindex","undefined","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","name","props","emits","setup","expose","emit","rootTabs","ns","visibility","focused","navScroll$","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","isWheelScrolling","tracker","isHorizontal","includes","tabPosition","sizeName","value","navStyle","dir","transition","transform","width","navContainerWidth","height","navContainerHeight","navWidth","navHeight","box","navContainerSize","navSize","onWheel","atStartEdge","atEndEdge","layout","offset","handleWheel","event","scrollPrev","containerSize","currentOffset","newOffset","scrollNext","scrollToActiveTab","nav","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","offsetHeight","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","code","step","up","down","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","setRefs","el","key","focusActiveTab","setTimeout","tabListRef","scheduleRender","scrollBtn","e","is","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","tabLabelContent","slots","label","active","onFocus","onBlur","delete","backspace"],"sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n triggerRef,\n watch,\n} from 'vue'\nimport {\n useDocumentVisibility,\n useElementSize,\n useResizeObserver,\n useWindowFocus,\n} from '@vueuse/core'\nimport {\n buildProps,\n capitalize,\n definePropType,\n getEventCode,\n mutable,\n rAF,\n throwError,\n} from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport useWheel from '@element-plus/components/virtual-list/src/hooks/use-wheel'\nimport { clamp } from 'lodash-unified'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type {\n CSSProperties,\n ComponentPublicInstance,\n ExtractPropTypes,\n ExtractPublicPropTypes,\n} from 'vue'\nimport type { TabBarInstance } from './tab-bar'\nimport type { TabPaneName, TabsPaneContext } from './constants'\n\ninterface Scrollable {\n next?: boolean\n prev?: number\n}\n\nexport const tabNavProps = buildProps({\n panes: {\n type: definePropType<TabsPaneContext[]>(Array),\n default: () => mutable([] as const),\n },\n currentName: {\n type: [String, Number],\n default: '',\n },\n editable: Boolean,\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\n /**\n * @description tab-nav tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n} as const)\n\nexport const tabNavEmits = {\n tabClick: (tab: TabsPaneContext, tabName: TabPaneName, ev: Event) =>\n ev instanceof Event,\n tabRemove: (tab: TabsPaneContext, ev: Event) => ev instanceof Event,\n}\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavPropsPublic = ExtractPublicPropTypes<typeof tabNavProps>\nexport type TabNavEmits = typeof tabNavEmits\n\nconst COMPONENT_NAME = 'ElTabNav'\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, { expose, emit }) {\n const rootTabs = inject(tabsRootContextKey)\n if (!rootTabs) throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`)\n\n const ns = useNamespace('tabs')\n const visibility = useDocumentVisibility()\n const focused = useWindowFocus()\n\n const navScroll$ = ref<HTMLDivElement>()\n const nav$ = ref<HTMLDivElement>()\n const el$ = ref<HTMLDivElement>()\n const tabRefsMap = ref<{ [key: TabPaneName]: HTMLDivElement }>({})\n\n const tabBarRef = ref<TabBarInstance>()\n\n const scrollable = ref<false | Scrollable>(false)\n const navOffset = ref(0)\n const isFocus = ref(false)\n const focusable = ref(true)\n const isWheelScrolling = ref(false)\n const tracker = shallowRef()\n\n const isHorizontal = computed(() =>\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n )\n\n const sizeName = computed(() => (isHorizontal.value ? 'width' : 'height'))\n const navStyle = computed<CSSProperties>(() => {\n const dir = sizeName.value === 'width' ? 'X' : 'Y'\n return {\n transition: isWheelScrolling.value ? 'none' : undefined,\n transform: `translate${dir}(-${navOffset.value}px)`,\n }\n })\n\n const { width: navContainerWidth, height: navContainerHeight } =\n useElementSize(navScroll$)\n const { width: navWidth, height: navHeight } = useElementSize(\n nav$,\n { width: 0, height: 0 },\n { box: 'border-box' }\n )\n\n const navContainerSize = computed(() =>\n isHorizontal.value ? navContainerWidth.value : navContainerHeight.value\n )\n const navSize = computed(() =>\n isHorizontal.value ? navWidth.value : navHeight.value\n )\n\n const { onWheel } = useWheel(\n {\n atStartEdge: computed(() => navOffset.value <= 0),\n atEndEdge: computed(\n () => navSize.value - navOffset.value <= navContainerSize.value\n ),\n layout: computed(() =>\n isHorizontal.value ? 'horizontal' : 'vertical'\n ),\n },\n (offset) => {\n navOffset.value = clamp(\n navOffset.value + offset,\n 0,\n navSize.value - navContainerSize.value\n )\n }\n )\n\n const handleWheel = (event: WheelEvent) => {\n isWheelScrolling.value = true\n onWheel(event)\n rAF(() => {\n isWheelScrolling.value = false\n })\n }\n\n const scrollPrev = () => {\n if (!navScroll$.value) return\n\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (!currentOffset) return\n\n const newOffset =\n currentOffset > containerSize ? currentOffset - containerSize : 0\n\n navOffset.value = newOffset\n }\n\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (navSize - currentOffset <= containerSize) return\n\n const newOffset =\n navSize - currentOffset > containerSize * 2\n ? currentOffset + containerSize\n : navSize - containerSize\n\n navOffset.value = newOffset\n }\n\n const scrollToActiveTab = async () => {\n const nav = nav$.value\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n if (!activeTab) return\n\n const navScroll = navScroll$.value\n\n const activeTabBounding = activeTab.getBoundingClientRect()\n const navScrollBounding = navScroll.getBoundingClientRect()\n const maxOffset = isHorizontal.value\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height\n const currentOffset = navOffset.value\n let newOffset = currentOffset\n\n if (isHorizontal.value) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset =\n currentOffset - (navScrollBounding.left - activeTabBounding.left)\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset =\n currentOffset + activeTabBounding.right - navScrollBounding.right\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset =\n currentOffset - (navScrollBounding.top - activeTabBounding.top)\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset =\n currentOffset +\n (activeTabBounding.bottom - navScrollBounding.bottom)\n }\n }\n newOffset = Math.max(newOffset, 0)\n navOffset.value = Math.min(newOffset, maxOffset)\n }\n\n const update = () => {\n if (!nav$.value || !navScroll$.value) return\n\n props.stretch && tabBarRef.value?.update()\n\n const navSize = nav$.value.getBoundingClientRect()[sizeName.value]\n const containerSize =\n navScroll$.value.getBoundingClientRect()[sizeName.value]\n const currentOffset = navOffset.value\n\n if (containerSize < navSize) {\n scrollable.value = scrollable.value || {}\n scrollable.value.prev = currentOffset\n scrollable.value.next = currentOffset + containerSize < navSize\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize\n }\n } else {\n scrollable.value = false\n if (currentOffset > 0) {\n navOffset.value = 0\n }\n }\n }\n\n const changeTab = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let step = 0\n\n switch (code) {\n case EVENT_CODE.left:\n case EVENT_CODE.up:\n step = -1\n break\n case EVENT_CODE.right:\n case EVENT_CODE.down:\n step = 1\n break\n default:\n return\n }\n\n const tabList = Array.from(\n (\n event.currentTarget as HTMLDivElement\n ).querySelectorAll<HTMLDivElement>('[role=tab]:not(.is-disabled)')\n )\n const currentIndex = tabList.indexOf(event.target as HTMLDivElement)\n let nextIndex = currentIndex + step\n\n if (nextIndex < 0) {\n nextIndex = tabList.length - 1\n } else if (nextIndex >= tabList.length) {\n nextIndex = 0\n }\n\n tabList[nextIndex].focus({ preventScroll: true }) // 改变焦点元素\n tabList[nextIndex].click() // 选中下一个tab\n setFocus()\n }\n\n const setFocus = () => {\n if (focusable.value) isFocus.value = true\n }\n const removeFocus = () => (isFocus.value = false)\n\n const setRefs = (\n el: Element | ComponentPublicInstance | null,\n key: TabPaneName\n ) => {\n tabRefsMap.value[key] = el as HTMLDivElement\n }\n\n const focusActiveTab = async () => {\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n activeTab?.focus({ preventScroll: true })\n }\n\n watch(visibility, (visibility) => {\n if (visibility === 'hidden') {\n focusable.value = false\n } else if (visibility === 'visible') {\n setTimeout(() => (focusable.value = true), 50)\n }\n })\n watch(focused, (focused) => {\n if (focused) {\n setTimeout(() => (focusable.value = true), 50)\n } else {\n focusable.value = false\n }\n })\n\n useResizeObserver(el$, () => {\n rAF(update)\n })\n\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0))\n onUpdated(() => update())\n\n expose({\n scrollToActiveTab,\n removeFocus,\n focusActiveTab,\n tabListRef: nav$,\n tabBarRef,\n scheduleRender: () => triggerRef(tracker),\n })\n\n return () => {\n const scrollBtn = scrollable.value\n ? [\n <span\n class={[\n ns.e('nav-prev'),\n ns.is('disabled', !scrollable.value.prev),\n ]}\n onClick={scrollPrev}\n >\n <ElIcon>\n <ArrowLeft />\n </ElIcon>\n </span>,\n <span\n class={[\n ns.e('nav-next'),\n ns.is('disabled', !scrollable.value.next),\n ]}\n onClick={scrollNext}\n >\n <ElIcon>\n <ArrowRight />\n </ElIcon>\n </span>,\n ]\n : null\n\n const tabs = props.panes.map((pane, index) => {\n const uid = pane.uid\n const disabled = pane.props.disabled\n const tabName = pane.props.name ?? pane.index ?? `${index}`\n const closable =\n !disabled &&\n (pane.isClosable || (pane.props.closable !== false && props.editable))\n pane.index = `${index}`\n\n const btnClose = closable ? (\n <ElIcon\n class=\"is-icon-close\"\n // `onClick` not exist when generate dts\n\n // @ts-ignore\n onClick={(ev: MouseEvent) => emit('tabRemove', pane, ev)}\n >\n <Close />\n </ElIcon>\n ) : null\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label\n const tabindex =\n !disabled && pane.active\n ? (props.tabindex ?? rootTabs.props.tabindex)\n : -1\n\n return (\n <div\n ref={(el) => setRefs(el, tabName)}\n class={[\n ns.e('item'),\n ns.is(rootTabs.props.tabPosition),\n ns.is('active', pane.active),\n ns.is('disabled', disabled),\n ns.is('closable', closable),\n ns.is('focus', isFocus.value),\n ]}\n id={`tab-${tabName}`}\n key={`tab-${uid}`}\n aria-controls={`pane-${tabName}`}\n role=\"tab\"\n aria-selected={pane.active}\n tabindex={tabindex}\n onFocus={() => setFocus()}\n onBlur={() => removeFocus()}\n onClick={(ev: MouseEvent) => {\n removeFocus()\n emit('tabClick', pane, tabName, ev)\n }}\n onKeydown={(ev: KeyboardEvent) => {\n const code = getEventCode(ev)\n if (\n closable &&\n (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', pane, ev)\n }\n }}\n >\n {...[tabLabelContent, btnClose]}\n </div>\n )\n })\n\n // By tracking the value property, we can schedule a job to re-render `TabNav` when needed.\n // Unlike `instance.update`, the scheduler ensures the job is queued only once even if we trigger it multiple times.\n tracker.value\n\n return (\n <div\n ref={el$}\n class={[\n ns.e('nav-wrap'),\n ns.is('scrollable', !!scrollable.value),\n ns.is(rootTabs.props.tabPosition),\n ]}\n >\n {scrollBtn}\n <div class={ns.e('nav-scroll')} ref={navScroll$}>\n {props.panes.length > 0 ? (\n <div\n class={[\n ns.e('nav'),\n ns.is(rootTabs.props.tabPosition),\n ns.is(\n 'stretch',\n props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ),\n ]}\n ref={nav$}\n style={navStyle.value}\n role=\"tablist\"\n onKeydown={changeTab}\n onWheel={handleWheel}\n >\n {...[\n !props.type ? (\n <TabBar\n ref={tabBarRef}\n tabs={[...props.panes]}\n tabRefs={tabRefsMap.value}\n />\n ) : null,\n tabs,\n ]}\n </div>\n ) : null}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n scrollToActiveTab: () => Promise<void>\n removeFocus: () => void\n focusActiveTab: () => void\n scheduleRender: () => void\n tabListRef: HTMLDivElement | undefined\n tabBarRef: TabBarInstance | undefined\n}\n\nexport default TabNav\n"],"mappings":"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"}
@@ -67,9 +67,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
67
67
  readonly hideAfter: 200;
68
68
  readonly autoClose: 0;
69
69
  }>>>, {
70
- effect: PopperEffect;
71
- teleported: boolean;
72
70
  offset: number;
71
+ teleported: boolean;
72
+ effect: PopperEffect;
73
73
  placement: Placement;
74
74
  popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
75
75
  visible: boolean | null;
@@ -116,9 +116,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
116
116
  "onBefore-show"?: ((...args: any[]) => any) | undefined;
117
117
  "onBefore-hide"?: ((...args: any[]) => any) | undefined;
118
118
  }, {
119
- effect: PopperEffect;
120
- teleported: boolean;
121
119
  offset: number;
120
+ teleported: boolean;
121
+ effect: PopperEffect;
122
122
  placement: Placement;
123
123
  popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
124
124
  visible: boolean | null;
@@ -31,8 +31,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
31
31
  closeOnPressEscape: boolean;
32
32
  targetAreaClickable: boolean;
33
33
  }>, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
34
- close: (current: number) => void;
35
34
  change: (current: number) => void;
35
+ close: (current: number) => void;
36
36
  "update:modelValue": (value: boolean) => void;
37
37
  finish: () => void;
38
38
  "update:current": (current: number) => void;
@@ -53,18 +53,18 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
53
53
  closeOnPressEscape: boolean;
54
54
  targetAreaClickable: boolean;
55
55
  }>>> & {
56
- onClose?: ((current: number) => any) | undefined;
57
56
  onChange?: ((current: number) => any) | undefined;
57
+ onClose?: ((current: number) => any) | undefined;
58
58
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
59
59
  onFinish?: (() => any) | undefined;
60
60
  "onUpdate:current"?: ((current: number) => any) | undefined;
61
61
  }, {
62
- closeOnPressEscape: boolean;
63
62
  appendTo: string | HTMLElement;
64
63
  placement: _floating_ui_utils0.Placement;
65
64
  showArrow: boolean;
66
65
  gap: TourGap;
67
66
  mask: TourMask;
67
+ closeOnPressEscape: boolean;
68
68
  showClose: boolean;
69
69
  scrollIntoViewOptions: boolean | ScrollIntoViewOptions;
70
70
  current: number;
@@ -408,10 +408,10 @@ declare const __VLS_export: vue.DefineComponent<{
408
408
  __epPropKey: true;
409
409
  };
410
410
  }>>, {
411
- effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
412
- props: TreeOptionProps;
413
- teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
414
411
  offset: number;
412
+ teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
413
+ props: TreeOptionProps;
414
+ effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
415
415
  valueKey: string;
416
416
  modelValue: EpPropMergeType<(new (...args: any[]) => string | number | boolean | Record<string, any> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[]) | (() => EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[] | null) | ((new (...args: any[]) => string | number | boolean | Record<string, any> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[]) | (() => EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[] | null))[], unknown, unknown>;
417
417
  debounce: number;
@@ -104,8 +104,7 @@ function useTree(props, emit) {
104
104
  const nodeMap = tree.value.treeNodeMap;
105
105
  expandedKeySet.value.forEach((key) => {
106
106
  const node = nodeMap.get(key);
107
- expandedKeySet.value.delete(node.key);
108
- node.expanded = false;
107
+ if (node) node.expanded = false;
109
108
  });
110
109
  keys.forEach((k) => {
111
110
  let node = nodeMap.get(k);
@@ -196,11 +195,12 @@ function useTree(props, emit) {
196
195
  watch(() => props.currentNodeKey, (key) => {
197
196
  currentKey.value = key;
198
197
  }, { immediate: true });
199
- watch(() => props.defaultExpandedKeys, (key) => {
200
- expandedKeySet.value = new Set(key);
201
- }, { immediate: true });
198
+ watch(() => props.defaultExpandedKeys, (keys) => {
199
+ setExpandedKeys(keys || []);
200
+ });
202
201
  watch(() => props.data, (data) => {
203
202
  setData(data);
203
+ setExpandedKeys(props.defaultExpandedKeys || []);
204
204
  }, { immediate: true });
205
205
  return {
206
206
  tree,
@@ -1 +1 @@
1
- {"version":3,"file":"useTree.mjs","names":[],"sources":["../../../../../../../packages/components/tree-v2/src/composables/useTree.ts"],"sourcesContent":["import { computed, ref, shallowRef, watch } from 'vue'\nimport { isObject } from '@element-plus/utils'\nimport {\n CURRENT_CHANGE,\n NODE_CLICK,\n NODE_COLLAPSE,\n NODE_DROP,\n NODE_EXPAND,\n TreeOptionsEnum,\n} from '../virtual-tree'\nimport { useCheck } from './useCheck'\nimport { useFilter } from './useFilter'\n\nimport type {\n FixedSizeList,\n Alignment as ScrollStrategy,\n} from '@element-plus/components/virtual-list'\nimport type { SetupContext } from 'vue'\nimport type { treeEmits } from '../virtual-tree'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\nimport type {\n Tree,\n TreeData,\n TreeKey,\n TreeNode,\n TreeNodeData,\n TreeProps,\n} from '../types'\n\nexport function useTree(\n props: TreeProps,\n emit: SetupContext<typeof treeEmits>['emit']\n) {\n const expandedKeySet = ref<Set<TreeKey>>(new Set())\n const currentKey = ref<TreeKey | undefined>()\n const tree = shallowRef<Tree | undefined>()\n const listRef = ref<typeof FixedSizeList | undefined>()\n\n const {\n isIndeterminate,\n isChecked,\n toggleCheckbox,\n getCheckedKeys,\n getCheckedNodes,\n getHalfCheckedKeys,\n getHalfCheckedNodes,\n setChecked,\n setCheckedKeys,\n } = useCheck(props, tree)\n\n const { doFilter, hiddenNodeKeySet, isForceHiddenExpandIcon } = useFilter(\n props,\n tree\n )\n\n const valueKey = computed(() => {\n return props.props?.value || TreeOptionsEnum.KEY\n })\n const childrenKey = computed(() => {\n return props.props?.children || TreeOptionsEnum.CHILDREN\n })\n const disabledKey = computed(() => {\n return props.props?.disabled || TreeOptionsEnum.DISABLED\n })\n const labelKey = computed(() => {\n return props.props?.label || TreeOptionsEnum.LABEL\n })\n\n const flattenTree = computed(() => {\n const expandedKeys = expandedKeySet.value\n const hiddenKeys = hiddenNodeKeySet.value\n const flattenNodes: TreeNode[] = []\n const nodes = tree.value?.treeNodes || []\n\n const stack: TreeNode[] = []\n for (let i = nodes.length - 1; i >= 0; --i) {\n stack.push(nodes[i])\n }\n while (stack.length) {\n const node = stack.pop()!\n if (hiddenKeys.has(node.key)) continue\n\n flattenNodes.push(node)\n if (node.children && expandedKeys.has(node.key)) {\n for (let i = node.children.length - 1; i >= 0; --i) {\n stack.push(node.children[i])\n }\n }\n }\n\n return flattenNodes\n })\n\n const isNotEmpty = computed(() => {\n return flattenTree.value.length > 0\n })\n\n function createTree(data: TreeData): Tree {\n const treeNodeMap: Map<TreeKey, TreeNode> = new Map()\n const levelTreeNodeMap: Map<number, TreeNode[]> = new Map()\n let maxLevel = 1\n function traverse(\n nodes: TreeData,\n level = 1,\n parent: TreeNode | undefined = undefined\n ) {\n const siblings: TreeNode[] = []\n for (const rawNode of nodes) {\n const value = getKey(rawNode)\n const node: TreeNode = {\n level,\n key: value,\n data: rawNode,\n }\n node.label = getLabel(rawNode)\n node.parent = parent\n const children = getChildren(rawNode)\n node.disabled = getDisabled(rawNode)\n node.isLeaf = !children || children.length === 0\n node.expanded = expandedKeySet.value.has(value)\n if (children && children.length) {\n node.children = traverse(children, level + 1, node)\n }\n siblings.push(node)\n treeNodeMap.set(value, node)\n if (!levelTreeNodeMap.has(level)) {\n levelTreeNodeMap.set(level, [])\n }\n levelTreeNodeMap.get(level)?.push(node)\n }\n if (level > maxLevel) {\n maxLevel = level\n }\n return siblings\n }\n const treeNodes: TreeNode[] = traverse(data)\n return {\n treeNodeMap,\n levelTreeNodeMap,\n maxLevel,\n treeNodes,\n }\n }\n\n function filter(query: string) {\n const keys = doFilter(query)\n if (keys) {\n expandedKeySet.value = keys\n }\n }\n\n function getChildren(node: TreeNodeData): TreeNodeData[] {\n return node[childrenKey.value]\n }\n\n function getKey(node: TreeNodeData): TreeKey {\n if (!node) {\n return ''\n }\n return node[valueKey.value]\n }\n\n function getDisabled(node: TreeNodeData): boolean {\n return node[disabledKey.value]\n }\n\n function getLabel(node: TreeNodeData): string {\n return node[labelKey.value]\n }\n\n function toggleExpand(node: TreeNode) {\n const expandedKeys = expandedKeySet.value\n if (expandedKeys.has(node.key)) {\n collapseNode(node)\n } else {\n expandNode(node)\n }\n }\n\n function setExpandedKeys(keys: TreeKey[]) {\n const expandedKeys = new Set<TreeKey>()\n const nodeMap = tree.value!.treeNodeMap\n\n expandedKeySet.value.forEach((key) => {\n const node = nodeMap.get(key)!\n expandedKeySet.value.delete(node.key)\n node.expanded = false\n })\n\n keys.forEach((k) => {\n let node = nodeMap.get(k)\n while (node && !expandedKeys.has(node.key)) {\n expandedKeys.add(node.key)\n node.expanded = true\n node = node.parent\n }\n })\n\n expandedKeySet.value = expandedKeys\n }\n\n function handleNodeClick(node: TreeNode, e: MouseEvent) {\n emit(NODE_CLICK, node.data, node, e)\n handleCurrentChange(node)\n if (props.expandOnClickNode) {\n toggleExpand(node)\n }\n if (\n props.showCheckbox &&\n (props.checkOnClickNode || (node.isLeaf && props.checkOnClickLeaf)) &&\n !node.disabled\n ) {\n toggleCheckbox(node, !isChecked(node), true)\n }\n }\n\n function handleNodeDrop(node: TreeNode, e: DragEvent) {\n emit(NODE_DROP, node.data, node, e)\n }\n\n function handleCurrentChange(node: TreeNode) {\n if (!isCurrent(node)) {\n currentKey.value = node.key\n emit(CURRENT_CHANGE, node.data, node)\n }\n }\n\n function handleNodeCheck(node: TreeNode, checked: CheckboxValueType) {\n toggleCheckbox(node, checked)\n }\n\n function expandNode(node: TreeNode) {\n const keySet = expandedKeySet.value\n if (tree.value && props.accordion) {\n // whether only one node among the same level can be expanded at one time\n const { treeNodeMap } = tree.value\n keySet.forEach((key) => {\n const treeNode = treeNodeMap.get(key)\n if (node && node.level === treeNode?.level) {\n keySet.delete(key)\n treeNode.expanded = false\n }\n })\n }\n keySet.add(node.key)\n const _node = getNode(node.key)\n if (_node) {\n _node.expanded = true\n emit(NODE_EXPAND, _node.data, _node)\n }\n }\n\n function collapseNode(node: TreeNode) {\n expandedKeySet.value.delete(node.key)\n const _node = getNode(node.key)\n if (_node) {\n _node.expanded = false\n emit(NODE_COLLAPSE, _node.data, _node)\n }\n }\n\n function isDisabled(node: TreeNode): boolean {\n return !!node.disabled\n }\n\n function isCurrent(node: TreeNode): boolean {\n const current = currentKey.value\n return current !== undefined && current === node.key\n }\n\n function getCurrentNode(): TreeNodeData | undefined {\n if (!currentKey.value) return undefined\n return tree.value?.treeNodeMap.get(currentKey.value)?.data\n }\n\n function getCurrentKey(): TreeKey | undefined {\n return currentKey.value\n }\n\n function setCurrentKey(key: TreeKey): void {\n currentKey.value = key\n }\n\n function setData(data: TreeData) {\n tree.value = createTree(data)\n }\n\n function getNode(data: TreeKey | TreeNodeData) {\n const key = isObject(data) ? getKey(data) : data\n return tree.value?.treeNodeMap.get(key)\n }\n\n function scrollToNode(key: TreeKey, strategy: ScrollStrategy = 'auto') {\n const node = getNode(key)\n if (node && listRef.value) {\n listRef.value.scrollToItem(flattenTree.value.indexOf(node), strategy)\n }\n }\n\n function scrollTo(offset: number) {\n listRef.value?.scrollTo(offset)\n }\n\n watch(\n () => props.currentNodeKey,\n (key) => {\n currentKey.value = key\n },\n {\n immediate: true,\n }\n )\n\n watch(\n () => props.defaultExpandedKeys,\n (key) => {\n expandedKeySet.value = new Set<TreeKey>(key)\n },\n {\n immediate: true,\n }\n )\n\n watch(\n () => props.data!,\n (data: TreeData) => {\n setData(data)\n },\n {\n immediate: true,\n }\n )\n\n return {\n tree,\n flattenTree,\n isNotEmpty,\n listRef,\n getKey,\n getChildren,\n toggleExpand,\n toggleCheckbox,\n isChecked,\n isIndeterminate,\n isDisabled,\n isCurrent,\n isForceHiddenExpandIcon,\n handleNodeClick,\n handleNodeDrop,\n handleNodeCheck,\n // expose\n getCurrentNode,\n getCurrentKey,\n setCurrentKey,\n getCheckedKeys,\n getCheckedNodes,\n getHalfCheckedKeys,\n getHalfCheckedNodes,\n setChecked,\n setCheckedKeys,\n filter,\n setData,\n getNode,\n expandNode,\n collapseNode,\n setExpandedKeys,\n scrollToNode,\n scrollTo,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useTree.mjs","names":[],"sources":["../../../../../../../packages/components/tree-v2/src/composables/useTree.ts"],"sourcesContent":["import { computed, ref, shallowRef, watch } from 'vue'\nimport { isObject } from '@element-plus/utils'\nimport {\n CURRENT_CHANGE,\n NODE_CLICK,\n NODE_COLLAPSE,\n NODE_DROP,\n NODE_EXPAND,\n TreeOptionsEnum,\n} from '../virtual-tree'\nimport { useCheck } from './useCheck'\nimport { useFilter } from './useFilter'\n\nimport type {\n FixedSizeList,\n Alignment as ScrollStrategy,\n} from '@element-plus/components/virtual-list'\nimport type { SetupContext } from 'vue'\nimport type { treeEmits } from '../virtual-tree'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\nimport type {\n Tree,\n TreeData,\n TreeKey,\n TreeNode,\n TreeNodeData,\n TreeProps,\n} from '../types'\n\nexport function useTree(\n props: TreeProps,\n emit: SetupContext<typeof treeEmits>['emit']\n) {\n const expandedKeySet = ref<Set<TreeKey>>(new Set())\n const currentKey = ref<TreeKey | undefined>()\n const tree = shallowRef<Tree | undefined>()\n const listRef = ref<typeof FixedSizeList | undefined>()\n\n const {\n isIndeterminate,\n isChecked,\n toggleCheckbox,\n getCheckedKeys,\n getCheckedNodes,\n getHalfCheckedKeys,\n getHalfCheckedNodes,\n setChecked,\n setCheckedKeys,\n } = useCheck(props, tree)\n\n const { doFilter, hiddenNodeKeySet, isForceHiddenExpandIcon } = useFilter(\n props,\n tree\n )\n\n const valueKey = computed(() => {\n return props.props?.value || TreeOptionsEnum.KEY\n })\n const childrenKey = computed(() => {\n return props.props?.children || TreeOptionsEnum.CHILDREN\n })\n const disabledKey = computed(() => {\n return props.props?.disabled || TreeOptionsEnum.DISABLED\n })\n const labelKey = computed(() => {\n return props.props?.label || TreeOptionsEnum.LABEL\n })\n\n const flattenTree = computed(() => {\n const expandedKeys = expandedKeySet.value\n const hiddenKeys = hiddenNodeKeySet.value\n const flattenNodes: TreeNode[] = []\n const nodes = tree.value?.treeNodes || []\n\n const stack: TreeNode[] = []\n for (let i = nodes.length - 1; i >= 0; --i) {\n stack.push(nodes[i])\n }\n while (stack.length) {\n const node = stack.pop()!\n if (hiddenKeys.has(node.key)) continue\n\n flattenNodes.push(node)\n if (node.children && expandedKeys.has(node.key)) {\n for (let i = node.children.length - 1; i >= 0; --i) {\n stack.push(node.children[i])\n }\n }\n }\n\n return flattenNodes\n })\n\n const isNotEmpty = computed(() => {\n return flattenTree.value.length > 0\n })\n\n function createTree(data: TreeData): Tree {\n const treeNodeMap: Map<TreeKey, TreeNode> = new Map()\n const levelTreeNodeMap: Map<number, TreeNode[]> = new Map()\n let maxLevel = 1\n function traverse(\n nodes: TreeData,\n level = 1,\n parent: TreeNode | undefined = undefined\n ) {\n const siblings: TreeNode[] = []\n for (const rawNode of nodes) {\n const value = getKey(rawNode)\n const node: TreeNode = {\n level,\n key: value,\n data: rawNode,\n }\n node.label = getLabel(rawNode)\n node.parent = parent\n const children = getChildren(rawNode)\n node.disabled = getDisabled(rawNode)\n node.isLeaf = !children || children.length === 0\n node.expanded = expandedKeySet.value.has(value)\n if (children && children.length) {\n node.children = traverse(children, level + 1, node)\n }\n siblings.push(node)\n treeNodeMap.set(value, node)\n if (!levelTreeNodeMap.has(level)) {\n levelTreeNodeMap.set(level, [])\n }\n levelTreeNodeMap.get(level)?.push(node)\n }\n if (level > maxLevel) {\n maxLevel = level\n }\n return siblings\n }\n const treeNodes: TreeNode[] = traverse(data)\n return {\n treeNodeMap,\n levelTreeNodeMap,\n maxLevel,\n treeNodes,\n }\n }\n\n function filter(query: string) {\n const keys = doFilter(query)\n if (keys) {\n expandedKeySet.value = keys\n }\n }\n\n function getChildren(node: TreeNodeData): TreeNodeData[] {\n return node[childrenKey.value]\n }\n\n function getKey(node: TreeNodeData): TreeKey {\n if (!node) {\n return ''\n }\n return node[valueKey.value]\n }\n\n function getDisabled(node: TreeNodeData): boolean {\n return node[disabledKey.value]\n }\n\n function getLabel(node: TreeNodeData): string {\n return node[labelKey.value]\n }\n\n function toggleExpand(node: TreeNode) {\n const expandedKeys = expandedKeySet.value\n if (expandedKeys.has(node.key)) {\n collapseNode(node)\n } else {\n expandNode(node)\n }\n }\n\n function setExpandedKeys(keys: TreeKey[]) {\n const expandedKeys = new Set<TreeKey>()\n const nodeMap = tree.value!.treeNodeMap\n\n expandedKeySet.value.forEach((key) => {\n const node = nodeMap.get(key)\n if (node) node.expanded = false\n })\n\n keys.forEach((k) => {\n let node = nodeMap.get(k)\n while (node && !expandedKeys.has(node.key)) {\n expandedKeys.add(node.key)\n node.expanded = true\n node = node.parent\n }\n })\n\n expandedKeySet.value = expandedKeys\n }\n\n function handleNodeClick(node: TreeNode, e: MouseEvent) {\n emit(NODE_CLICK, node.data, node, e)\n handleCurrentChange(node)\n if (props.expandOnClickNode) {\n toggleExpand(node)\n }\n if (\n props.showCheckbox &&\n (props.checkOnClickNode || (node.isLeaf && props.checkOnClickLeaf)) &&\n !node.disabled\n ) {\n toggleCheckbox(node, !isChecked(node), true)\n }\n }\n\n function handleNodeDrop(node: TreeNode, e: DragEvent) {\n emit(NODE_DROP, node.data, node, e)\n }\n\n function handleCurrentChange(node: TreeNode) {\n if (!isCurrent(node)) {\n currentKey.value = node.key\n emit(CURRENT_CHANGE, node.data, node)\n }\n }\n\n function handleNodeCheck(node: TreeNode, checked: CheckboxValueType) {\n toggleCheckbox(node, checked)\n }\n\n function expandNode(node: TreeNode) {\n const keySet = expandedKeySet.value\n if (tree.value && props.accordion) {\n // whether only one node among the same level can be expanded at one time\n const { treeNodeMap } = tree.value\n keySet.forEach((key) => {\n const treeNode = treeNodeMap.get(key)\n if (node && node.level === treeNode?.level) {\n keySet.delete(key)\n treeNode.expanded = false\n }\n })\n }\n keySet.add(node.key)\n const _node = getNode(node.key)\n if (_node) {\n _node.expanded = true\n emit(NODE_EXPAND, _node.data, _node)\n }\n }\n\n function collapseNode(node: TreeNode) {\n expandedKeySet.value.delete(node.key)\n const _node = getNode(node.key)\n if (_node) {\n _node.expanded = false\n emit(NODE_COLLAPSE, _node.data, _node)\n }\n }\n\n function isDisabled(node: TreeNode): boolean {\n return !!node.disabled\n }\n\n function isCurrent(node: TreeNode): boolean {\n const current = currentKey.value\n return current !== undefined && current === node.key\n }\n\n function getCurrentNode(): TreeNodeData | undefined {\n if (!currentKey.value) return undefined\n return tree.value?.treeNodeMap.get(currentKey.value)?.data\n }\n\n function getCurrentKey(): TreeKey | undefined {\n return currentKey.value\n }\n\n function setCurrentKey(key: TreeKey): void {\n currentKey.value = key\n }\n\n function setData(data: TreeData) {\n tree.value = createTree(data)\n }\n\n function getNode(data: TreeKey | TreeNodeData) {\n const key = isObject(data) ? getKey(data) : data\n return tree.value?.treeNodeMap.get(key)\n }\n\n function scrollToNode(key: TreeKey, strategy: ScrollStrategy = 'auto') {\n const node = getNode(key)\n if (node && listRef.value) {\n listRef.value.scrollToItem(flattenTree.value.indexOf(node), strategy)\n }\n }\n\n function scrollTo(offset: number) {\n listRef.value?.scrollTo(offset)\n }\n\n watch(\n () => props.currentNodeKey,\n (key) => {\n currentKey.value = key\n },\n {\n immediate: true,\n }\n )\n\n watch(\n () => props.defaultExpandedKeys,\n (keys) => {\n setExpandedKeys(keys || [])\n }\n )\n\n watch(\n () => props.data!,\n (data: TreeData) => {\n setData(data)\n setExpandedKeys(props.defaultExpandedKeys || [])\n },\n {\n immediate: true,\n }\n )\n\n return {\n tree,\n flattenTree,\n isNotEmpty,\n listRef,\n getKey,\n getChildren,\n toggleExpand,\n toggleCheckbox,\n isChecked,\n isIndeterminate,\n isDisabled,\n isCurrent,\n isForceHiddenExpandIcon,\n handleNodeClick,\n handleNodeDrop,\n handleNodeCheck,\n // expose\n getCurrentNode,\n getCurrentKey,\n setCurrentKey,\n getCheckedKeys,\n getCheckedNodes,\n getHalfCheckedKeys,\n getHalfCheckedNodes,\n setChecked,\n setCheckedKeys,\n filter,\n setData,\n getNode,\n expandNode,\n collapseNode,\n setExpandedKeys,\n scrollToNode,\n scrollTo,\n }\n}\n"],"mappings":"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"}
@@ -54,9 +54,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
54
54
  readonly httpRequest: UploadRequestHandler;
55
55
  readonly disabled: undefined;
56
56
  }>>>, {
57
- onError: (err: UploadAjaxError, rawFile: UploadRawFile) => void;
58
57
  disabled: boolean;
59
58
  name: string;
59
+ onError: (err: UploadAjaxError, rawFile: UploadRawFile) => void;
60
60
  onProgress: (evt: UploadProgressEvent, rawFile: UploadRawFile) => void;
61
61
  data: Awaitable<UploadData> | ((rawFile: UploadRawFile) => Awaitable<UploadData>);
62
62
  beforeUpload: UploadHooks["beforeUpload"];
@@ -75,10 +75,10 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
75
75
  readonly httpRequest: UploadRequestHandler;
76
76
  readonly disabled: undefined;
77
77
  }>>>, {
78
- onError: UploadHooks["onError"];
79
78
  onChange: UploadHooks["onChange"];
80
79
  disabled: boolean;
81
80
  name: string;
81
+ onError: UploadHooks["onError"];
82
82
  onProgress: UploadHooks["onProgress"];
83
83
  data: Awaitable<UploadData> | ((rawFile: UploadRawFile) => Awaitable<UploadData>);
84
84
  beforeUpload: UploadHooks["beforeUpload"];
@@ -17,10 +17,10 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
17
17
  content: string;
18
18
  gap: () => number[];
19
19
  }>>>, {
20
- rotate: number;
21
20
  zIndex: number;
22
21
  content: string | string[];
23
22
  gap: [number, number];
23
+ rotate: number;
24
24
  }, {}>;
25
25
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
26
26
  declare const _default: typeof __VLS_export;
package/es/version.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region ../../packages/element-plus/version.ts
2
- const version = "0.0.20260310";
2
+ const version = "0.0.20260312";
3
3
 
4
4
  //#endregion
5
5
  export { version };
@@ -1 +1 @@
1
- {"version":3,"file":"version.mjs","names":[],"sources":["../../../packages/element-plus/version.ts"],"sourcesContent":["export const version = '0.0.20260310'\n"],"mappings":";AAAA,MAAa,UAAU"}
1
+ {"version":3,"file":"version.mjs","names":[],"sources":["../../../packages/element-plus/version.ts"],"sourcesContent":["export const version = '0.0.20260312'\n"],"mappings":";AAAA,MAAa,UAAU"}
@@ -31,9 +31,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
31
31
  }>>> & {
32
32
  onClose?: ((evt: MouseEvent) => any) | undefined;
33
33
  }, {
34
+ type: keyof typeof TypeComponentsMap;
34
35
  title: string;
35
36
  description: string;
36
- type: keyof typeof TypeComponentsMap;
37
37
  closable: boolean;
38
38
  closeText: string;
39
39
  effect: "light" | "dark";
@@ -29,8 +29,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
29
29
  onChange?: ((href: string) => any) | undefined;
30
30
  onClick?: ((e: MouseEvent, href?: string | undefined) => any) | undefined;
31
31
  }, {
32
- type: "default" | "underline";
33
32
  offset: number;
33
+ type: "default" | "underline";
34
34
  direction: "vertical" | "horizontal";
35
35
  marker: boolean;
36
36
  duration: number;
@@ -99,8 +99,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
99
99
  "onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
100
100
  onClear?: (() => any) | undefined;
101
101
  }, {
102
- type: InputType;
103
102
  teleported: boolean;
103
+ type: InputType;
104
104
  valueKey: string;
105
105
  modelValue: string | number;
106
106
  debounce: number;
@@ -28,8 +28,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
28
28
  showZero: boolean;
29
29
  offset: () => number[];
30
30
  }>>>, {
31
- type: "primary" | "success" | "warning" | "info" | "danger";
32
31
  offset: [number, number];
32
+ type: "primary" | "success" | "warning" | "info" | "danger";
33
33
  value: string | number;
34
34
  max: number;
35
35
  showZero: boolean;
@@ -43,12 +43,12 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
43
43
  onChange?: ((current: number, prev: number) => any) | undefined;
44
44
  }, {
45
45
  type: "" | "card";
46
- initialIndex: number;
47
46
  loop: boolean;
48
47
  trigger: "hover" | "click";
49
48
  direction: "horizontal" | "vertical";
50
49
  height: string;
51
50
  arrow: "always" | "hover" | "never";
51
+ initialIndex: number;
52
52
  autoplay: boolean;
53
53
  interval: number;
54
54
  indicatorPosition: "" | "none" | "outside";
@@ -99,9 +99,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
99
99
  onExpandChange?: ((val: CascaderValue) => any) | undefined;
100
100
  onRemoveTag?: ((val: CascaderNodeValue | CascaderNodePathValue) => any) | undefined;
101
101
  }, {
102
- effect: PopperEffect;
103
- props: CascaderProps;
104
102
  teleported: boolean;
103
+ props: CascaderProps;
104
+ effect: PopperEffect;
105
105
  debounce: number;
106
106
  placement: Placement;
107
107
  popperStyle: string | false | vue.CSSProperties | StyleValue[] | null;
@@ -152,8 +152,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
152
152
  scrollToExpandingNode: () => void;
153
153
  loadLazyRootNodes: () => void;
154
154
  }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
155
- close: () => void;
156
155
  change: (value: CascaderValue | null | undefined) => void;
156
+ close: () => void;
157
157
  "update:modelValue": (value: CascaderValue | null | undefined) => void;
158
158
  "expand-change": (value: CascaderNodePathValue) => void;
159
159
  }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<CascaderPanelProps>, {
@@ -161,8 +161,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
161
161
  props: () => CascaderProps;
162
162
  border: boolean;
163
163
  }>>> & {
164
- onClose?: (() => any) | undefined;
165
164
  onChange?: ((value: CascaderValue | null | undefined) => any) | undefined;
165
+ onClose?: (() => any) | undefined;
166
166
  "onUpdate:modelValue"?: ((value: CascaderValue | null | undefined) => any) | undefined;
167
167
  "onExpand-change"?: ((value: CascaderNodePathValue) => any) | undefined;
168
168
  }, {
@@ -37,12 +37,12 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
37
37
  onChange?: ((val: CheckboxValueType[]) => any) | undefined;
38
38
  "onUpdate:modelValue"?: ((val: CheckboxGroupValueType) => any) | undefined;
39
39
  }, {
40
- type: "checkbox" | "button";
41
40
  props: {
42
41
  value?: string;
43
42
  label?: string;
44
43
  disabled?: string;
45
44
  };
45
+ type: "checkbox" | "button";
46
46
  modelValue: CheckboxGroupValueType;
47
47
  disabled: boolean;
48
48
  validateEvent: boolean;
@@ -29,8 +29,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
29
29
  lg: () => {};
30
30
  xl: () => {};
31
31
  }>>>, {
32
- push: number;
33
32
  offset: number;
33
+ push: number;
34
34
  tag: string;
35
35
  span: number;
36
36
  pull: number;