@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":"helper.js","names":["isFirefox"],"sources":["../../../../../../packages/components/mention/src/helper.ts"],"sourcesContent":["import { ensureArray, isFirefox } from '@element-plus/utils'\n\nimport type { MentionCtx, MentionOption } from './types'\n\nexport const filterOption = (\n pattern: string,\n option: MentionOption\n): boolean => {\n const lowerCase = pattern.toLowerCase()\n const label = option.label || option.value || ''\n return label.toLowerCase().includes(lowerCase)\n}\n\nexport const getMentionCtx = (\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n prefix: string | string[],\n split: string\n) => {\n const { selectionEnd } = inputEl\n if (selectionEnd === null) return\n const inputValue = inputEl.value\n const prefixArray = ensureArray(prefix)\n let splitIndex = -1\n let mentionCtx: MentionCtx | undefined\n for (let i = selectionEnd - 1; i >= 0; --i) {\n const char = inputValue[i]\n if (char === split || char === '\\n' || char === '\\r') {\n splitIndex = i\n continue\n }\n if (prefixArray.includes(char)) {\n const end = splitIndex === -1 ? selectionEnd : splitIndex\n const pattern = inputValue.slice(i + 1, end)\n mentionCtx = {\n pattern,\n start: i + 1,\n end,\n prefix: char,\n prefixIndex: i,\n splitIndex,\n selectionEnd,\n }\n break\n }\n }\n return mentionCtx\n}\n\n/**\n * fork from textarea-caret-position\n * https://github.com/component/textarea-caret-position\n * The MIT License (MIT)\n * Copyright (c) 2015 Jonathan Ong me@jongleberry.com\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nexport const getCursorPosition = (\n element: HTMLInputElement | HTMLTextAreaElement,\n options = {\n debug: false,\n useSelectionEnd: false,\n }\n) => {\n const selectionStart =\n element.selectionStart !== null ? element.selectionStart : 0\n const selectionEnd = element.selectionEnd !== null ? element.selectionEnd : 0\n const position = options.useSelectionEnd ? selectionEnd : selectionStart\n // We'll copy the properties below into the mirror div.\n // Note that some browsers, such as Firefox, do not concatenate properties\n // into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n // so we have to list every single property explicitly.\n const properties: string[] = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n 'letterSpacing',\n 'wordSpacing',\n 'tabSize',\n 'MozTabSize',\n ]\n\n if (options.debug) {\n const el = document.querySelector(\n '#input-textarea-caret-position-mirror-div'\n )\n if (el?.parentNode) el.parentNode.removeChild(el)\n }\n\n // The mirror div will replicate the textareas style\n const div = document.createElement('div')\n div.id = 'input-textarea-caret-position-mirror-div'\n document.body.appendChild(div)\n\n const style = div.style\n const computed = window.getComputedStyle(element)\n\n const isInput = element.nodeName === 'INPUT'\n\n // Default textarea styles\n style.whiteSpace = isInput ? 'nowrap' : 'pre-wrap'\n if (!isInput) style.wordWrap = 'break-word' // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute' // required to return coordinates properly\n if (!options.debug) style.visibility = 'hidden' // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach((prop) => {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = Number.parseInt(computed.height as string)\n const outerHeight =\n Number.parseInt(computed.paddingTop as string) +\n Number.parseInt(computed.paddingBottom as string) +\n Number.parseInt(computed.borderTopWidth as string) +\n Number.parseInt(computed.borderBottomWidth as string)\n const targetHeight =\n outerHeight + Number.parseInt(computed.lineHeight as string)\n if (height > targetHeight) {\n style.lineHeight = `${height - outerHeight}px`\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight\n } else {\n style.lineHeight = '0'\n }\n } else {\n style.lineHeight = computed.height\n }\n } else {\n style[prop as any] = computed[prop as any]\n }\n })\n\n if (isFirefox()) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > Number.parseInt(computed.height as string)) {\n style.overflowY = 'scroll'\n }\n } else {\n style.overflow = 'hidden' // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.slice(0, Math.max(0, position))\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput && div.textContent) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00A0')\n }\n\n const span = document.createElement('span')\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textareas content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.slice(Math.max(0, position)) || '.' // || because a completely empty faux span doesn't render at all\n span.style.position = 'relative'\n span.style.left = `${-element.scrollLeft}px`\n span.style.top = `${-element.scrollTop}px`\n div.appendChild(span)\n\n const relativePosition = {\n top: span.offsetTop + Number.parseInt(computed.borderTopWidth as string),\n left: span.offsetLeft + Number.parseInt(computed.borderLeftWidth as string),\n // We don't use line-height since it may be too large for position. Eg. 34px\n // for input\n height: Number.parseInt(computed.fontSize as string) * 1.5,\n }\n\n if (options.debug) {\n span.style.backgroundColor = '#aaa'\n } else {\n document.body.removeChild(div)\n }\n\n if (relativePosition.left >= element.clientWidth) {\n relativePosition.left = element.clientWidth\n }\n return relativePosition\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","names":["isFirefox"],"sources":["../../../../../../packages/components/mention/src/helper.ts"],"sourcesContent":["import { ensureArray, isFirefox } from '@element-plus/utils'\n\nimport type { MentionCtx, MentionOption } from './types'\n\nexport const filterOption = (\n pattern: string,\n option: MentionOption\n): boolean => {\n const lowerCase = pattern.toLowerCase()\n const label = option.label || option.value || ''\n return label.toLowerCase().includes(lowerCase)\n}\n\nexport const getMentionCtx = (\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n prefix: string | string[],\n split: string\n) => {\n const { selectionEnd } = inputEl\n if (selectionEnd === null) return\n const inputValue = inputEl.value\n const prefixArray = ensureArray(prefix)\n let splitIndex = -1\n let mentionCtx: MentionCtx | undefined\n for (let i = selectionEnd - 1; i >= 0; --i) {\n const char = inputValue[i]\n if (\n splitIndex === -1 &&\n (char === split || char === '\\n' || char === '\\r')\n ) {\n splitIndex = i\n continue\n }\n if (prefixArray.includes(char)) {\n const end = splitIndex === -1 ? selectionEnd : splitIndex\n const pattern = inputValue.slice(i + 1, end)\n mentionCtx = {\n pattern,\n start: i + 1,\n end,\n prefix: char,\n prefixIndex: i,\n splitIndex,\n selectionEnd,\n }\n break\n }\n }\n return mentionCtx\n}\n\n/**\n * fork from textarea-caret-position\n * https://github.com/component/textarea-caret-position\n * The MIT License (MIT)\n * Copyright (c) 2015 Jonathan Ong me@jongleberry.com\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nexport const getCursorPosition = (\n element: HTMLInputElement | HTMLTextAreaElement,\n options = {\n debug: false,\n useSelectionEnd: false,\n }\n) => {\n const selectionStart =\n element.selectionStart !== null ? element.selectionStart : 0\n const selectionEnd = element.selectionEnd !== null ? element.selectionEnd : 0\n const position = options.useSelectionEnd ? selectionEnd : selectionStart\n // We'll copy the properties below into the mirror div.\n // Note that some browsers, such as Firefox, do not concatenate properties\n // into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n // so we have to list every single property explicitly.\n const properties: string[] = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n 'letterSpacing',\n 'wordSpacing',\n 'tabSize',\n 'MozTabSize',\n ]\n\n if (options.debug) {\n const el = document.querySelector(\n '#input-textarea-caret-position-mirror-div'\n )\n if (el?.parentNode) el.parentNode.removeChild(el)\n }\n\n // The mirror div will replicate the textareas style\n const div = document.createElement('div')\n div.id = 'input-textarea-caret-position-mirror-div'\n document.body.appendChild(div)\n\n const style = div.style\n const computed = window.getComputedStyle(element)\n\n const isInput = element.nodeName === 'INPUT'\n\n // Default textarea styles\n style.whiteSpace = isInput ? 'nowrap' : 'pre-wrap'\n if (!isInput) style.wordWrap = 'break-word' // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute' // required to return coordinates properly\n if (!options.debug) style.visibility = 'hidden' // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach((prop) => {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = Number.parseInt(computed.height as string)\n const outerHeight =\n Number.parseInt(computed.paddingTop as string) +\n Number.parseInt(computed.paddingBottom as string) +\n Number.parseInt(computed.borderTopWidth as string) +\n Number.parseInt(computed.borderBottomWidth as string)\n const targetHeight =\n outerHeight + Number.parseInt(computed.lineHeight as string)\n if (height > targetHeight) {\n style.lineHeight = `${height - outerHeight}px`\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight\n } else {\n style.lineHeight = '0'\n }\n } else {\n style.lineHeight = computed.height\n }\n } else {\n style[prop as any] = computed[prop as any]\n }\n })\n\n if (isFirefox()) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > Number.parseInt(computed.height as string)) {\n style.overflowY = 'scroll'\n }\n } else {\n style.overflow = 'hidden' // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.slice(0, Math.max(0, position))\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput && div.textContent) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00A0')\n }\n\n const span = document.createElement('span')\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textareas content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.slice(Math.max(0, position)) || '.' // || because a completely empty faux span doesn't render at all\n span.style.position = 'relative'\n span.style.left = `${-element.scrollLeft}px`\n span.style.top = `${-element.scrollTop}px`\n div.appendChild(span)\n\n const relativePosition = {\n top: span.offsetTop + Number.parseInt(computed.borderTopWidth as string),\n left: span.offsetLeft + Number.parseInt(computed.borderLeftWidth as string),\n // We don't use line-height since it may be too large for position. Eg. 34px\n // for input\n height: Number.parseInt(computed.fontSize as string) * 1.5,\n }\n\n if (options.debug) {\n span.style.backgroundColor = '#aaa'\n } else {\n document.body.removeChild(div)\n }\n\n if (relativePosition.left >= element.clientWidth) {\n relativePosition.left = element.clientWidth\n }\n return relativePosition\n}\n"],"mappings":"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"}
@@ -76,10 +76,10 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
76
76
  onSearch?: ((pattern: string, prefix: string) => any) | undefined;
77
77
  "onWhole-remove"?: ((pattern: string, prefix: string) => any) | undefined;
78
78
  }, {
79
- type: InputType;
79
+ offset: number;
80
80
  props: MentionOptionProps;
81
+ type: InputType;
81
82
  split: string;
82
- offset: number;
83
83
  modelValue: string;
84
84
  placement: "bottom" | "top";
85
85
  disabled: boolean;
@@ -134,7 +134,7 @@ declare const messageProps: {
134
134
  readonly type: EpPropFinalized<StringConstructor, "info" | "primary" | "success" | "warning" | "error", unknown, "info", boolean>;
135
135
  readonly plain: EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
136
136
  readonly offset: EpPropFinalized<NumberConstructor, unknown, unknown, 16, boolean>;
137
- readonly placement: EpPropFinalized<StringConstructor, "top" | "bottom" | "top-right" | "top-left" | "bottom-right" | "bottom-left", unknown, undefined, boolean>;
137
+ readonly placement: EpPropFinalized<StringConstructor, "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right", unknown, undefined, boolean>;
138
138
  readonly zIndex: EpPropFinalized<NumberConstructor, unknown, unknown, 0, boolean>;
139
139
  readonly grouping: EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
140
140
  readonly repeatNum: EpPropFinalized<NumberConstructor, unknown, unknown, 1, boolean>;
@@ -27,7 +27,7 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
27
27
  readonly grouping: false;
28
28
  readonly repeatNum: 1;
29
29
  readonly appendTo: HTMLElement;
30
- }>, "type" | "onClose" | "zIndex" | "offset" | "placement" | "id" | "icon" | "plain" | "message" | "showClose" | "duration" | "customClass" | "dangerouslyUseHTMLString" | "grouping" | "repeatNum">>, {
30
+ }>, "zIndex" | "offset" | "type" | "onClose" | "placement" | "id" | "icon" | "plain" | "message" | "showClose" | "duration" | "customClass" | "dangerouslyUseHTMLString" | "grouping" | "repeatNum">>, {
31
31
  visible: vue.Ref<boolean>;
32
32
  bottom: vue.ComputedRef<number>;
33
33
  close: typeof close;
@@ -50,13 +50,13 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
50
50
  readonly grouping: false;
51
51
  readonly repeatNum: 1;
52
52
  readonly appendTo: HTMLElement;
53
- }>, "type" | "onClose" | "zIndex" | "offset" | "placement" | "id" | "icon" | "plain" | "message" | "showClose" | "duration" | "customClass" | "dangerouslyUseHTMLString" | "grouping" | "repeatNum">>>> & {
53
+ }>, "zIndex" | "offset" | "type" | "onClose" | "placement" | "id" | "icon" | "plain" | "message" | "showClose" | "duration" | "customClass" | "dangerouslyUseHTMLString" | "grouping" | "repeatNum">>>> & {
54
54
  onDestroy?: (() => any) | undefined;
55
55
  }, {
56
- type: MessageType;
57
- onClose: () => void;
58
56
  zIndex: number;
59
57
  offset: number;
58
+ type: MessageType;
59
+ onClose: () => void;
60
60
  placement: MessagePlacement;
61
61
  id: string;
62
62
  icon: IconPropType;
@@ -110,7 +110,7 @@ declare const notificationProps: {
110
110
  readonly validator: ((val: unknown) => boolean) | undefined;
111
111
  __epPropKey: true;
112
112
  };
113
- readonly position: EpPropFinalized<StringConstructor, "top-right" | "top-left" | "bottom-right" | "bottom-left", unknown, "top-right", boolean>;
113
+ readonly position: EpPropFinalized<StringConstructor, "top-left" | "top-right" | "bottom-left" | "bottom-right", unknown, "top-right", boolean>;
114
114
  readonly showClose: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
115
115
  readonly title: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
116
116
  readonly type: EpPropFinalized<StringConstructor, "" | "info" | "primary" | "success" | "warning" | "error", unknown, "", boolean>;
@@ -41,10 +41,10 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
41
41
  }>>> & {
42
42
  onDestroy?: (() => any) | undefined;
43
43
  }, {
44
- title: string;
45
- type: NotificationType;
46
44
  offset: number;
47
45
  position: NotificationPosition;
46
+ type: NotificationType;
47
+ title: string;
48
48
  id: string;
49
49
  onClick: () => void;
50
50
  message: string | vue.VNode | (() => vue.VNode);
@@ -135,8 +135,8 @@ declare const _default: vue.DefineComponent<{
135
135
  "onPrev-click"?: ((val: number) => any) | undefined;
136
136
  "onNext-click"?: ((val: number) => any) | undefined;
137
137
  }, {
138
- readonly small: boolean;
139
138
  readonly teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
139
+ readonly small: boolean;
140
140
  readonly popperClass: string;
141
141
  readonly disabled: boolean;
142
142
  readonly layout: string;
@@ -45,8 +45,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
45
45
  onCancel?: ((e: MouseEvent) => any) | undefined;
46
46
  onConfirm?: ((e: MouseEvent) => any) | undefined;
47
47
  }, {
48
- effect: PopperEffect;
49
48
  teleported: boolean;
49
+ effect: PopperEffect;
50
50
  icon: IconPropType;
51
51
  hideAfter: number;
52
52
  width: string | number;
@@ -71,9 +71,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
71
71
  "onAfter-enter"?: (() => any) | undefined;
72
72
  "onAfter-leave"?: (() => any) | undefined;
73
73
  }, {
74
- effect: PopperEffect;
75
- teleported: boolean;
76
74
  offset: number;
75
+ teleported: boolean;
76
+ effect: PopperEffect;
77
77
  placement: Placement;
78
78
  popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
79
79
  tabindex: string | number;
@@ -78,8 +78,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
78
78
  onMouseenter?: ((evt: MouseEvent) => any) | undefined;
79
79
  onMouseleave?: ((evt: MouseEvent) => any) | undefined;
80
80
  }, {
81
- effect: PopperEffect;
82
81
  offset: number;
82
+ effect: PopperEffect;
83
83
  placement: Placement$1;
84
84
  popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
85
85
  visible: boolean;
@@ -33,9 +33,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
33
33
  onChange?: ((val: string | number | boolean | undefined) => any) | undefined;
34
34
  "onUpdate:modelValue"?: ((val: string | number | boolean | undefined) => any) | undefined;
35
35
  }, {
36
- type: "radio" | "button";
37
36
  fill: string;
38
37
  props: radioOptionProp;
38
+ type: "radio" | "button";
39
39
  modelValue: string | number | boolean;
40
40
  id: string;
41
41
  disabled: boolean;
@@ -413,10 +413,10 @@ declare const __VLS_export: vue.DefineComponent<{
413
413
  "onRemove-tag"?: ((...args: any[]) => any) | undefined;
414
414
  "onPopup-scroll"?: ((...args: any[]) => any) | undefined;
415
415
  }, {
416
- effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
417
- props: Props;
418
- teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
419
416
  offset: number;
417
+ teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
418
+ props: Props;
419
+ effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
420
420
  valueKey: string;
421
421
  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>;
422
422
  debounce: number;
@@ -600,10 +600,10 @@ declare const __VLS_export: vue.DefineComponent<{
600
600
  "onVisible-change"?: ((visible: boolean) => any) | undefined;
601
601
  "onRemove-tag"?: ((val: unknown) => any) | undefined;
602
602
  }, {
603
- readonly effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
604
- readonly props: Props;
605
- readonly teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
606
603
  readonly offset: number;
604
+ readonly teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
605
+ readonly props: Props;
606
+ readonly effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
607
607
  readonly valueKey: string;
608
608
  readonly modelValue: any;
609
609
  readonly debounce: number;
@@ -109,7 +109,7 @@ function useTree(watcherData) {
109
109
  };
110
110
  (0, vue.watch)(() => expandRowKeys.value, () => {
111
111
  updateTreeData(true);
112
- });
112
+ }, { deep: true });
113
113
  (0, vue.watch)(() => normalizedData.value, () => {
114
114
  updateTreeData();
115
115
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","names":["getRowIdentity","isUndefined"],"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":"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"}
1
+ {"version":3,"file":"tree.js","names":["getRowIdentity","isUndefined"],"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;
@@ -66,11 +66,16 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
66
66
  const navOffset = (0, vue.ref)(0);
67
67
  const isFocus = (0, vue.ref)(false);
68
68
  const focusable = (0, vue.ref)(true);
69
+ const isWheelScrolling = (0, vue.ref)(false);
69
70
  const tracker = (0, vue.shallowRef)();
70
71
  const isHorizontal = (0, vue.computed)(() => ["top", "bottom"].includes(rootTabs.props.tabPosition));
71
72
  const sizeName = (0, vue.computed)(() => isHorizontal.value ? "width" : "height");
72
73
  const navStyle = (0, vue.computed)(() => {
73
- return { transform: `translate${sizeName.value === "width" ? "X" : "Y"}(-${navOffset.value}px)` };
74
+ const dir = sizeName.value === "width" ? "X" : "Y";
75
+ return {
76
+ transition: isWheelScrolling.value ? "none" : void 0,
77
+ transform: `translate${dir}(-${navOffset.value}px)`
78
+ };
74
79
  });
75
80
  const { width: navContainerWidth, height: navContainerHeight } = (0, _vueuse_core.useElementSize)(navScroll$);
76
81
  const { width: navWidth, height: navHeight } = (0, _vueuse_core.useElementSize)(nav$, {
@@ -86,6 +91,13 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
86
91
  }, (offset) => {
87
92
  navOffset.value = (0, lodash_unified.clamp)(navOffset.value + offset, 0, navSize.value - navContainerSize.value);
88
93
  });
94
+ const handleWheel = (event) => {
95
+ isWheelScrolling.value = true;
96
+ onWheel(event);
97
+ require_raf.rAF(() => {
98
+ isWheelScrolling.value = false;
99
+ });
100
+ };
89
101
  const scrollPrev = () => {
90
102
  if (!navScroll$.value) return;
91
103
  const containerSize = navScroll$.value[`offset${require_strings.capitalize(sizeName.value)}`];
@@ -126,8 +138,8 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
126
138
  const update = () => {
127
139
  if (!nav$.value || !navScroll$.value) return;
128
140
  props.stretch && tabBarRef.value?.update();
129
- const navSize = nav$.value[`offset${require_strings.capitalize(sizeName.value)}`];
130
- const containerSize = navScroll$.value[`offset${require_strings.capitalize(sizeName.value)}`];
141
+ const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
142
+ const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
131
143
  const currentOffset = navOffset.value;
132
144
  if (containerSize < navSize) {
133
145
  scrollable.value = scrollable.value || {};
@@ -262,7 +274,7 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
262
274
  "style": navStyle.value,
263
275
  "role": "tablist",
264
276
  "onKeydown": changeTab,
265
- "onWheel": onWheel
277
+ "onWheel": handleWheel
266
278
  }, [...[!props.type ? (0, vue.createVNode)(require_tab_bar.default, {
267
279
  "ref": tabBarRef,
268
280
  "tabs": [...props.panes],
@@ -1 +1 @@
1
- {"version":3,"file":"tab-nav.js","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.js","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;
@@ -106,8 +106,7 @@ function useTree(props, emit) {
106
106
  const nodeMap = tree.value.treeNodeMap;
107
107
  expandedKeySet.value.forEach((key) => {
108
108
  const node = nodeMap.get(key);
109
- expandedKeySet.value.delete(node.key);
110
- node.expanded = false;
109
+ if (node) node.expanded = false;
111
110
  });
112
111
  keys.forEach((k) => {
113
112
  let node = nodeMap.get(k);
@@ -198,11 +197,12 @@ function useTree(props, emit) {
198
197
  (0, vue.watch)(() => props.currentNodeKey, (key) => {
199
198
  currentKey.value = key;
200
199
  }, { immediate: true });
201
- (0, vue.watch)(() => props.defaultExpandedKeys, (key) => {
202
- expandedKeySet.value = new Set(key);
203
- }, { immediate: true });
200
+ (0, vue.watch)(() => props.defaultExpandedKeys, (keys) => {
201
+ setExpandedKeys(keys || []);
202
+ });
204
203
  (0, vue.watch)(() => props.data, (data) => {
205
204
  setData(data);
205
+ setExpandedKeys(props.defaultExpandedKeys || []);
206
206
  }, { immediate: true });
207
207
  return {
208
208
  tree,