@element-plus/nightly 0.0.20261010 → 0.0.20261011

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 (393) hide show
  1. package/attributes.json +1 -1
  2. package/dist/index.css +1 -1
  3. package/dist/index.full.js +209 -39
  4. package/dist/index.full.min.js +8 -8
  5. package/dist/index.full.min.js.map +1 -1
  6. package/dist/index.full.min.mjs +9 -9
  7. package/dist/index.full.min.mjs.map +1 -1
  8. package/dist/index.full.mjs +209 -39
  9. package/dist/locale/af.js +1 -1
  10. package/dist/locale/af.min.js +1 -1
  11. package/dist/locale/af.min.mjs +1 -1
  12. package/dist/locale/af.mjs +1 -1
  13. package/dist/locale/ar-eg.js +1 -1
  14. package/dist/locale/ar-eg.min.js +1 -1
  15. package/dist/locale/ar-eg.min.mjs +1 -1
  16. package/dist/locale/ar-eg.mjs +1 -1
  17. package/dist/locale/ar.js +1 -1
  18. package/dist/locale/ar.min.js +1 -1
  19. package/dist/locale/ar.min.mjs +1 -1
  20. package/dist/locale/ar.mjs +1 -1
  21. package/dist/locale/az.js +1 -1
  22. package/dist/locale/az.min.js +1 -1
  23. package/dist/locale/az.min.mjs +1 -1
  24. package/dist/locale/az.mjs +1 -1
  25. package/dist/locale/bg.js +1 -1
  26. package/dist/locale/bg.min.js +1 -1
  27. package/dist/locale/bg.min.mjs +1 -1
  28. package/dist/locale/bg.mjs +1 -1
  29. package/dist/locale/bn.js +1 -1
  30. package/dist/locale/bn.min.js +1 -1
  31. package/dist/locale/bn.min.mjs +1 -1
  32. package/dist/locale/bn.mjs +1 -1
  33. package/dist/locale/ca.js +1 -1
  34. package/dist/locale/ca.min.js +1 -1
  35. package/dist/locale/ca.min.mjs +1 -1
  36. package/dist/locale/ca.mjs +1 -1
  37. package/dist/locale/ckb.js +1 -1
  38. package/dist/locale/ckb.min.js +1 -1
  39. package/dist/locale/ckb.min.mjs +1 -1
  40. package/dist/locale/ckb.mjs +1 -1
  41. package/dist/locale/cs.js +1 -1
  42. package/dist/locale/cs.min.js +1 -1
  43. package/dist/locale/cs.min.mjs +1 -1
  44. package/dist/locale/cs.mjs +1 -1
  45. package/dist/locale/da.js +1 -1
  46. package/dist/locale/da.min.js +1 -1
  47. package/dist/locale/da.min.mjs +1 -1
  48. package/dist/locale/da.mjs +1 -1
  49. package/dist/locale/de.js +1 -1
  50. package/dist/locale/de.min.js +1 -1
  51. package/dist/locale/de.min.mjs +1 -1
  52. package/dist/locale/de.mjs +1 -1
  53. package/dist/locale/el.js +1 -1
  54. package/dist/locale/el.min.js +1 -1
  55. package/dist/locale/el.min.mjs +1 -1
  56. package/dist/locale/el.mjs +1 -1
  57. package/dist/locale/en.js +1 -1
  58. package/dist/locale/en.min.js +1 -1
  59. package/dist/locale/en.min.mjs +1 -1
  60. package/dist/locale/en.mjs +1 -1
  61. package/dist/locale/eo.js +1 -1
  62. package/dist/locale/eo.min.js +1 -1
  63. package/dist/locale/eo.min.mjs +1 -1
  64. package/dist/locale/eo.mjs +1 -1
  65. package/dist/locale/es.js +1 -1
  66. package/dist/locale/es.min.js +1 -1
  67. package/dist/locale/es.min.mjs +1 -1
  68. package/dist/locale/es.mjs +1 -1
  69. package/dist/locale/et.js +1 -1
  70. package/dist/locale/et.min.js +1 -1
  71. package/dist/locale/et.min.mjs +1 -1
  72. package/dist/locale/et.mjs +1 -1
  73. package/dist/locale/eu.js +1 -1
  74. package/dist/locale/eu.min.js +1 -1
  75. package/dist/locale/eu.min.mjs +1 -1
  76. package/dist/locale/eu.mjs +1 -1
  77. package/dist/locale/fa.js +1 -1
  78. package/dist/locale/fa.min.js +1 -1
  79. package/dist/locale/fa.min.mjs +1 -1
  80. package/dist/locale/fa.mjs +1 -1
  81. package/dist/locale/fi.js +1 -1
  82. package/dist/locale/fi.min.js +1 -1
  83. package/dist/locale/fi.min.mjs +1 -1
  84. package/dist/locale/fi.mjs +1 -1
  85. package/dist/locale/fr.js +1 -1
  86. package/dist/locale/fr.min.js +1 -1
  87. package/dist/locale/fr.min.mjs +1 -1
  88. package/dist/locale/fr.mjs +1 -1
  89. package/dist/locale/gl.js +1 -1
  90. package/dist/locale/gl.min.js +1 -1
  91. package/dist/locale/gl.min.mjs +1 -1
  92. package/dist/locale/gl.mjs +1 -1
  93. package/dist/locale/he.js +1 -1
  94. package/dist/locale/he.min.js +1 -1
  95. package/dist/locale/he.min.mjs +1 -1
  96. package/dist/locale/he.mjs +1 -1
  97. package/dist/locale/hi.js +1 -1
  98. package/dist/locale/hi.min.js +1 -1
  99. package/dist/locale/hi.min.mjs +1 -1
  100. package/dist/locale/hi.mjs +1 -1
  101. package/dist/locale/hr.js +1 -1
  102. package/dist/locale/hr.min.js +1 -1
  103. package/dist/locale/hr.min.mjs +1 -1
  104. package/dist/locale/hr.mjs +1 -1
  105. package/dist/locale/hu.js +1 -1
  106. package/dist/locale/hu.min.js +1 -1
  107. package/dist/locale/hu.min.mjs +1 -1
  108. package/dist/locale/hu.mjs +1 -1
  109. package/dist/locale/hy-am.js +1 -1
  110. package/dist/locale/hy-am.min.js +1 -1
  111. package/dist/locale/hy-am.min.mjs +1 -1
  112. package/dist/locale/hy-am.mjs +1 -1
  113. package/dist/locale/id.js +1 -1
  114. package/dist/locale/id.min.js +1 -1
  115. package/dist/locale/id.min.mjs +1 -1
  116. package/dist/locale/id.mjs +1 -1
  117. package/dist/locale/it.js +1 -1
  118. package/dist/locale/it.min.js +1 -1
  119. package/dist/locale/it.min.mjs +1 -1
  120. package/dist/locale/it.mjs +1 -1
  121. package/dist/locale/ja.js +1 -1
  122. package/dist/locale/ja.min.js +1 -1
  123. package/dist/locale/ja.min.mjs +1 -1
  124. package/dist/locale/ja.mjs +1 -1
  125. package/dist/locale/kk.js +1 -1
  126. package/dist/locale/kk.min.js +1 -1
  127. package/dist/locale/kk.min.mjs +1 -1
  128. package/dist/locale/kk.mjs +1 -1
  129. package/dist/locale/km.js +1 -1
  130. package/dist/locale/km.min.js +1 -1
  131. package/dist/locale/km.min.mjs +1 -1
  132. package/dist/locale/km.mjs +1 -1
  133. package/dist/locale/ko.js +1 -1
  134. package/dist/locale/ko.min.js +1 -1
  135. package/dist/locale/ko.min.mjs +1 -1
  136. package/dist/locale/ko.mjs +1 -1
  137. package/dist/locale/ku.js +1 -1
  138. package/dist/locale/ku.min.js +1 -1
  139. package/dist/locale/ku.min.mjs +1 -1
  140. package/dist/locale/ku.mjs +1 -1
  141. package/dist/locale/ky.js +1 -1
  142. package/dist/locale/ky.min.js +1 -1
  143. package/dist/locale/ky.min.mjs +1 -1
  144. package/dist/locale/ky.mjs +1 -1
  145. package/dist/locale/lo.js +1 -1
  146. package/dist/locale/lo.min.js +1 -1
  147. package/dist/locale/lo.min.mjs +1 -1
  148. package/dist/locale/lo.mjs +1 -1
  149. package/dist/locale/lt.js +1 -1
  150. package/dist/locale/lt.min.js +1 -1
  151. package/dist/locale/lt.min.mjs +1 -1
  152. package/dist/locale/lt.mjs +1 -1
  153. package/dist/locale/lv.js +1 -1
  154. package/dist/locale/lv.min.js +1 -1
  155. package/dist/locale/lv.min.mjs +1 -1
  156. package/dist/locale/lv.mjs +1 -1
  157. package/dist/locale/mg.js +1 -1
  158. package/dist/locale/mg.min.js +1 -1
  159. package/dist/locale/mg.min.mjs +1 -1
  160. package/dist/locale/mg.mjs +1 -1
  161. package/dist/locale/mn.js +1 -1
  162. package/dist/locale/mn.min.js +1 -1
  163. package/dist/locale/mn.min.mjs +1 -1
  164. package/dist/locale/mn.mjs +1 -1
  165. package/dist/locale/ms.js +1 -1
  166. package/dist/locale/ms.min.js +1 -1
  167. package/dist/locale/ms.min.mjs +1 -1
  168. package/dist/locale/ms.mjs +1 -1
  169. package/dist/locale/my.js +1 -1
  170. package/dist/locale/my.min.js +1 -1
  171. package/dist/locale/my.min.mjs +1 -1
  172. package/dist/locale/my.mjs +1 -1
  173. package/dist/locale/nb-no.js +1 -1
  174. package/dist/locale/nb-no.min.js +1 -1
  175. package/dist/locale/nb-no.min.mjs +1 -1
  176. package/dist/locale/nb-no.mjs +1 -1
  177. package/dist/locale/nl.js +1 -1
  178. package/dist/locale/nl.min.js +1 -1
  179. package/dist/locale/nl.min.mjs +1 -1
  180. package/dist/locale/nl.mjs +1 -1
  181. package/dist/locale/no.js +1 -1
  182. package/dist/locale/no.min.js +1 -1
  183. package/dist/locale/no.min.mjs +1 -1
  184. package/dist/locale/no.mjs +1 -1
  185. package/dist/locale/pa.js +1 -1
  186. package/dist/locale/pa.min.js +1 -1
  187. package/dist/locale/pa.min.mjs +1 -1
  188. package/dist/locale/pa.mjs +1 -1
  189. package/dist/locale/pl.js +1 -1
  190. package/dist/locale/pl.min.js +1 -1
  191. package/dist/locale/pl.min.mjs +1 -1
  192. package/dist/locale/pl.mjs +1 -1
  193. package/dist/locale/pt-br.js +1 -1
  194. package/dist/locale/pt-br.min.js +1 -1
  195. package/dist/locale/pt-br.min.mjs +1 -1
  196. package/dist/locale/pt-br.mjs +1 -1
  197. package/dist/locale/pt.js +1 -1
  198. package/dist/locale/pt.min.js +1 -1
  199. package/dist/locale/pt.min.mjs +1 -1
  200. package/dist/locale/pt.mjs +1 -1
  201. package/dist/locale/ro.js +1 -1
  202. package/dist/locale/ro.min.js +1 -1
  203. package/dist/locale/ro.min.mjs +1 -1
  204. package/dist/locale/ro.mjs +1 -1
  205. package/dist/locale/ru.js +1 -1
  206. package/dist/locale/ru.min.js +1 -1
  207. package/dist/locale/ru.min.mjs +1 -1
  208. package/dist/locale/ru.mjs +1 -1
  209. package/dist/locale/sk.js +1 -1
  210. package/dist/locale/sk.min.js +1 -1
  211. package/dist/locale/sk.min.mjs +1 -1
  212. package/dist/locale/sk.mjs +1 -1
  213. package/dist/locale/sl.js +1 -1
  214. package/dist/locale/sl.min.js +1 -1
  215. package/dist/locale/sl.min.mjs +1 -1
  216. package/dist/locale/sl.mjs +1 -1
  217. package/dist/locale/sr.js +1 -1
  218. package/dist/locale/sr.min.js +1 -1
  219. package/dist/locale/sr.min.mjs +1 -1
  220. package/dist/locale/sr.mjs +1 -1
  221. package/dist/locale/sv.js +1 -1
  222. package/dist/locale/sv.min.js +1 -1
  223. package/dist/locale/sv.min.mjs +1 -1
  224. package/dist/locale/sv.mjs +1 -1
  225. package/dist/locale/sw.js +1 -1
  226. package/dist/locale/sw.min.js +1 -1
  227. package/dist/locale/sw.min.mjs +1 -1
  228. package/dist/locale/sw.mjs +1 -1
  229. package/dist/locale/ta.js +1 -1
  230. package/dist/locale/ta.min.js +1 -1
  231. package/dist/locale/ta.min.mjs +1 -1
  232. package/dist/locale/ta.mjs +1 -1
  233. package/dist/locale/te.js +1 -1
  234. package/dist/locale/te.min.js +1 -1
  235. package/dist/locale/te.min.mjs +1 -1
  236. package/dist/locale/te.mjs +1 -1
  237. package/dist/locale/th.js +1 -1
  238. package/dist/locale/th.min.js +1 -1
  239. package/dist/locale/th.min.mjs +1 -1
  240. package/dist/locale/th.mjs +1 -1
  241. package/dist/locale/tk.js +1 -1
  242. package/dist/locale/tk.min.js +1 -1
  243. package/dist/locale/tk.min.mjs +1 -1
  244. package/dist/locale/tk.mjs +1 -1
  245. package/dist/locale/tr.js +1 -1
  246. package/dist/locale/tr.min.js +1 -1
  247. package/dist/locale/tr.min.mjs +1 -1
  248. package/dist/locale/tr.mjs +1 -1
  249. package/dist/locale/ug-cn.js +1 -1
  250. package/dist/locale/ug-cn.min.js +1 -1
  251. package/dist/locale/ug-cn.min.mjs +1 -1
  252. package/dist/locale/ug-cn.mjs +1 -1
  253. package/dist/locale/uk.js +1 -1
  254. package/dist/locale/uk.min.js +1 -1
  255. package/dist/locale/uk.min.mjs +1 -1
  256. package/dist/locale/uk.mjs +1 -1
  257. package/dist/locale/uz-uz.js +1 -1
  258. package/dist/locale/uz-uz.min.js +1 -1
  259. package/dist/locale/uz-uz.min.mjs +1 -1
  260. package/dist/locale/uz-uz.mjs +1 -1
  261. package/dist/locale/vi.js +1 -1
  262. package/dist/locale/vi.min.js +1 -1
  263. package/dist/locale/vi.min.mjs +1 -1
  264. package/dist/locale/vi.mjs +1 -1
  265. package/dist/locale/zh-cn.js +1 -1
  266. package/dist/locale/zh-cn.min.js +1 -1
  267. package/dist/locale/zh-cn.min.mjs +1 -1
  268. package/dist/locale/zh-cn.mjs +1 -1
  269. package/dist/locale/zh-hk.js +1 -1
  270. package/dist/locale/zh-hk.min.js +1 -1
  271. package/dist/locale/zh-hk.min.mjs +1 -1
  272. package/dist/locale/zh-hk.mjs +1 -1
  273. package/dist/locale/zh-mo.js +1 -1
  274. package/dist/locale/zh-mo.min.js +1 -1
  275. package/dist/locale/zh-mo.min.mjs +1 -1
  276. package/dist/locale/zh-mo.mjs +1 -1
  277. package/dist/locale/zh-tw.js +1 -1
  278. package/dist/locale/zh-tw.min.js +1 -1
  279. package/dist/locale/zh-tw.min.mjs +1 -1
  280. package/dist/locale/zh-tw.mjs +1 -1
  281. package/es/components/autocomplete/src/autocomplete.vue.d.ts +3 -3
  282. package/es/components/cascader/src/cascader.vue.d.ts +2 -2
  283. package/es/components/cascader-panel/src/index.vue.d.ts +2 -2
  284. package/es/components/checkbox/src/checkbox-button.vue.d.ts +2 -2
  285. package/es/components/checkbox/src/checkbox-group.vue.d.ts +2 -2
  286. package/es/components/checkbox/src/checkbox.vue.d.ts +2 -2
  287. package/es/components/collapse/src/collapse.vue.d.ts +2 -2
  288. package/es/components/color-picker/src/color-picker.vue.d.ts +2 -2
  289. package/es/components/date-picker-panel/src/date-picker-panel.d.ts +2 -2
  290. package/es/components/dialog/src/dialog.vue.d.ts +2 -2
  291. package/es/components/drawer/src/drawer.vue.d.ts +2 -2
  292. package/es/components/dropdown/src/dropdown.vue.d.ts +3 -0
  293. package/es/components/input/src/input.vue.d.ts +4 -4
  294. package/es/components/input-number/src/input-number.vue.d.ts +2 -2
  295. package/es/components/input-otp/src/input-otp.vue.d.ts +2 -2
  296. package/es/components/input-tag/src/input-tag.vue.d.ts +4 -4
  297. package/es/components/mention/src/mention.vue.d.ts +2 -2
  298. package/es/components/message-box/src/index.vue.d.ts +10 -10
  299. package/es/components/radio/src/radio-group.vue.d.ts +2 -2
  300. package/es/components/radio/src/radio.vue.d.ts +2 -2
  301. package/es/components/rate/src/rate.vue.d.ts +2 -2
  302. package/es/components/scrollbar/src/mask-utils.d.ts +5 -0
  303. package/es/components/scrollbar/src/mask-utils.mjs +34 -0
  304. package/es/components/scrollbar/src/mask-utils.mjs.map +1 -0
  305. package/es/components/scrollbar/src/mask.mjs +7 -0
  306. package/es/components/scrollbar/src/mask.mjs.map +1 -0
  307. package/es/components/scrollbar/src/mask.vue.d.ts +14 -0
  308. package/es/components/scrollbar/src/mask.vue_vue_type_script_setup_true_lang.mjs +113 -0
  309. package/es/components/scrollbar/src/mask.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  310. package/es/components/scrollbar/src/scrollbar.d.ts +6 -0
  311. package/es/components/scrollbar/src/scrollbar.mjs +15 -0
  312. package/es/components/scrollbar/src/scrollbar.mjs.map +1 -1
  313. package/es/components/scrollbar/src/scrollbar.vue.d.ts +1 -0
  314. package/es/components/scrollbar/src/scrollbar.vue_vue_type_script_setup_true_lang.mjs +56 -38
  315. package/es/components/scrollbar/src/scrollbar.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  316. package/es/components/scrollbar/src/scrollbar2.mjs.map +1 -1
  317. package/es/components/segmented/index.d.ts +3 -3
  318. package/es/components/segmented/src/segmented.vue.d.ts +2 -2
  319. package/es/components/select/src/select.vue.d.ts +4 -1
  320. package/es/components/select-v2/src/select.vue.d.ts +1 -1
  321. package/es/components/slider/src/slider.vue.d.ts +2 -2
  322. package/es/components/switch/src/switch.vue.d.ts +2 -2
  323. package/es/components/table/src/filter-panel.vue.d.ts +13 -10
  324. package/es/components/table/src/table-header/index.d.ts +5 -5
  325. package/es/components/time-picker/src/common/picker.vue.d.ts +2 -2
  326. package/es/components/time-select/src/time-select.vue.d.ts +2 -2
  327. package/es/components/tour/src/tour.vue.d.ts +2 -2
  328. package/es/components/transfer/src/transfer.vue.d.ts +2 -2
  329. package/es/components/tree/src/tree-node.vue.d.ts +5 -5
  330. package/es/components/tree/src/tree.vue.d.ts +5 -5
  331. package/es/version.d.ts +1 -1
  332. package/es/version.mjs +1 -1
  333. package/es/version.mjs.map +1 -1
  334. package/lib/components/autocomplete/src/autocomplete.vue.d.ts +3 -3
  335. package/lib/components/cascader/src/cascader.vue.d.ts +2 -2
  336. package/lib/components/cascader-panel/src/index.vue.d.ts +2 -2
  337. package/lib/components/checkbox/src/checkbox-button.vue.d.ts +2 -2
  338. package/lib/components/checkbox/src/checkbox-group.vue.d.ts +2 -2
  339. package/lib/components/checkbox/src/checkbox.vue.d.ts +2 -2
  340. package/lib/components/collapse/src/collapse.vue.d.ts +2 -2
  341. package/lib/components/color-picker/src/color-picker.vue.d.ts +2 -2
  342. package/lib/components/date-picker-panel/src/date-picker-panel.d.ts +2 -2
  343. package/lib/components/dialog/src/dialog.vue.d.ts +2 -2
  344. package/lib/components/drawer/src/drawer.vue.d.ts +2 -2
  345. package/lib/components/dropdown/src/dropdown.vue.d.ts +3 -0
  346. package/lib/components/input/src/input.vue.d.ts +4 -4
  347. package/lib/components/input-number/src/input-number.vue.d.ts +2 -2
  348. package/lib/components/input-otp/src/input-otp.vue.d.ts +2 -2
  349. package/lib/components/input-tag/src/input-tag.vue.d.ts +4 -4
  350. package/lib/components/mention/src/mention.vue.d.ts +2 -2
  351. package/lib/components/message-box/src/index.vue.d.ts +10 -10
  352. package/lib/components/radio/src/radio-group.vue.d.ts +2 -2
  353. package/lib/components/radio/src/radio.vue.d.ts +2 -2
  354. package/lib/components/rate/src/rate.vue.d.ts +2 -2
  355. package/lib/components/scrollbar/src/mask-utils.d.ts +5 -0
  356. package/lib/components/scrollbar/src/mask-utils.js +35 -0
  357. package/lib/components/scrollbar/src/mask-utils.js.map +1 -0
  358. package/lib/components/scrollbar/src/mask.js +10 -0
  359. package/lib/components/scrollbar/src/mask.js.map +1 -0
  360. package/lib/components/scrollbar/src/mask.vue.d.ts +14 -0
  361. package/lib/components/scrollbar/src/mask.vue_vue_type_script_setup_true_lang.js +113 -0
  362. package/lib/components/scrollbar/src/mask.vue_vue_type_script_setup_true_lang.js.map +1 -0
  363. package/lib/components/scrollbar/src/scrollbar.d.ts +6 -0
  364. package/lib/components/scrollbar/src/scrollbar.js +15 -0
  365. package/lib/components/scrollbar/src/scrollbar.js.map +1 -1
  366. package/lib/components/scrollbar/src/scrollbar.vue.d.ts +1 -0
  367. package/lib/components/scrollbar/src/scrollbar.vue_vue_type_script_setup_true_lang.js +55 -37
  368. package/lib/components/scrollbar/src/scrollbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  369. package/lib/components/scrollbar/src/scrollbar2.js.map +1 -1
  370. package/lib/components/segmented/index.d.ts +3 -3
  371. package/lib/components/segmented/src/segmented.vue.d.ts +2 -2
  372. package/lib/components/select/src/select.vue.d.ts +4 -1
  373. package/lib/components/select-v2/src/select.vue.d.ts +1 -1
  374. package/lib/components/slider/src/slider.vue.d.ts +2 -2
  375. package/lib/components/switch/src/switch.vue.d.ts +2 -2
  376. package/lib/components/table/src/filter-panel.vue.d.ts +13 -10
  377. package/lib/components/table/src/table-header/index.d.ts +5 -5
  378. package/lib/components/time-picker/src/common/picker.vue.d.ts +2 -2
  379. package/lib/components/time-select/src/time-select.vue.d.ts +2 -2
  380. package/lib/components/tour/src/tour.vue.d.ts +2 -2
  381. package/lib/components/transfer/src/transfer.vue.d.ts +2 -2
  382. package/lib/components/tree/src/tree-node.vue.d.ts +5 -5
  383. package/lib/components/tree/src/tree.vue.d.ts +5 -5
  384. package/lib/version.d.ts +1 -1
  385. package/lib/version.js +1 -1
  386. package/lib/version.js.map +1 -1
  387. package/package.json +3 -3
  388. package/tags.json +1 -1
  389. package/theme-chalk/el-scrollbar.css +1 -1
  390. package/theme-chalk/index.css +1 -1
  391. package/theme-chalk/src/common/var.scss +8 -0
  392. package/theme-chalk/src/scrollbar.scss +65 -0
  393. package/web-types.json +1 -1
@@ -0,0 +1,5 @@
1
+ //#region ../../packages/components/scrollbar/src/mask-utils.d.ts
2
+ type RTLOffsetType = 'negative' | 'positive-descending' | 'positive-ascending';
3
+ declare function getRTLOffsetType(recalculate?: boolean): RTLOffsetType;
4
+ //#endregion
5
+ export { getRTLOffsetType };
@@ -0,0 +1,35 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let _vueuse_core = require("@vueuse/core");
3
+ //#region ../../packages/components/scrollbar/src/mask-utils.ts
4
+ let cachedRTLResult = null;
5
+ function getRTLOffsetType(recalculate = false) {
6
+ if (!_vueuse_core.isClient) return "negative";
7
+ if (cachedRTLResult === null || recalculate) {
8
+ const outerDiv = document.createElement("div");
9
+ const outerStyle = outerDiv.style;
10
+ outerStyle.width = "50px";
11
+ outerStyle.height = "50px";
12
+ outerStyle.overflow = "scroll";
13
+ outerStyle.direction = "rtl";
14
+ outerStyle.position = "absolute";
15
+ outerStyle.visibility = "hidden";
16
+ outerStyle.top = "-9999px";
17
+ const innerDiv = document.createElement("div");
18
+ const innerStyle = innerDiv.style;
19
+ innerStyle.width = "100px";
20
+ innerStyle.height = "100px";
21
+ outerDiv.appendChild(innerDiv);
22
+ document.body.appendChild(outerDiv);
23
+ if (outerDiv.scrollLeft > 0) cachedRTLResult = "positive-descending";
24
+ else {
25
+ outerDiv.scrollLeft = 1;
26
+ cachedRTLResult = outerDiv.scrollLeft === 0 ? "negative" : "positive-ascending";
27
+ }
28
+ document.body.removeChild(outerDiv);
29
+ }
30
+ return cachedRTLResult;
31
+ }
32
+ //#endregion
33
+ exports.getRTLOffsetType = getRTLOffsetType;
34
+
35
+ //# sourceMappingURL=mask-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask-utils.js","names":["isClient"],"sources":["../../../../../../packages/components/scrollbar/src/mask-utils.ts"],"sourcesContent":["import { isClient } from '@element-plus/utils'\n\ntype RTLOffsetType = 'negative' | 'positive-descending' | 'positive-ascending'\n\nlet cachedRTLResult: RTLOffsetType | null = null\n\nexport function getRTLOffsetType(recalculate = false): RTLOffsetType {\n if (!isClient) return 'negative'\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement('div')\n const outerStyle = outerDiv.style\n outerStyle.width = '50px'\n outerStyle.height = '50px'\n outerStyle.overflow = 'scroll'\n outerStyle.direction = 'rtl'\n outerStyle.position = 'absolute'\n outerStyle.visibility = 'hidden'\n outerStyle.top = '-9999px'\n\n const innerDiv = document.createElement('div')\n const innerStyle = innerDiv.style\n innerStyle.width = '100px'\n innerStyle.height = '100px'\n\n outerDiv.appendChild(innerDiv)\n document.body.appendChild(outerDiv)\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending'\n } else {\n outerDiv.scrollLeft = 1\n cachedRTLResult =\n outerDiv.scrollLeft === 0 ? 'negative' : 'positive-ascending'\n }\n\n document.body.removeChild(outerDiv)\n }\n\n return cachedRTLResult\n}\n"],"mappings":";;;AAIA,IAAI,kBAAwC;AAE5C,SAAgB,iBAAiB,cAAc,OAAsB;CACnE,IAAI,CAACA,aAAAA,UAAU,OAAO;CACtB,IAAI,oBAAoB,QAAQ,aAAa;EAC3C,MAAM,WAAW,SAAS,cAAc,KAAK;EAC7C,MAAM,aAAa,SAAS;EAC5B,WAAW,QAAQ;EACnB,WAAW,SAAS;EACpB,WAAW,WAAW;EACtB,WAAW,YAAY;EACvB,WAAW,WAAW;EACtB,WAAW,aAAa;EACxB,WAAW,MAAM;EAEjB,MAAM,WAAW,SAAS,cAAc,KAAK;EAC7C,MAAM,aAAa,SAAS;EAC5B,WAAW,QAAQ;EACnB,WAAW,SAAS;EAEpB,SAAS,YAAY,QAAQ;EAC7B,SAAS,KAAK,YAAY,QAAQ;EAElC,IAAI,SAAS,aAAa,GACxB,kBAAkB;OACb;GACL,SAAS,aAAa;GACtB,kBACE,SAAS,eAAe,IAAI,aAAa;EAC7C;EAEA,SAAS,KAAK,YAAY,QAAQ;CACpC;CAEA,OAAO;AACT"}
@@ -0,0 +1,10 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ //#region ../../packages/components/scrollbar/src/mask.vue
6
+ var mask_default = require("./mask.vue_vue_type_script_setup_true_lang.js").default;
7
+ //#endregion
8
+ exports.default = mask_default;
9
+
10
+ //# sourceMappingURL=mask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask.js","names":[],"sources":["../../../../../../packages/components/scrollbar/src/mask.vue"],"sourcesContent":["<template>\n <div :class=\"ns.e('mask')\" aria-hidden=\"true\">\n <transition v-for=\"edge in edges\" :key=\"edge\" :name=\"ns.b('mask-fade')\">\n <div\n v-if=\"mask === true || mask === edge\"\n v-show=\"visible[edge]\"\n :class=\"ns.e(`${edge}-mask`)\"\n :style=\"styles[edge]\"\n aria-hidden=\"true\"\n />\n </transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject, shallowReactive, shallowRef } from 'vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { getStyle } from '@element-plus/utils'\nimport { scrollbarContextKey } from './constants'\nimport { getRTLOffsetType } from './mask-utils'\n\nimport type { CSSProperties } from 'vue'\nimport type { ScrollbarDirection, ScrollbarProps } from './scrollbar'\n\ndefineProps<{\n mask: ScrollbarProps['mask']\n}>()\n\nconst ns = useNamespace('scrollbar')\nconst scrollbar = inject(scrollbarContextKey)!\nconst edges = ['top', 'bottom', 'left', 'right'] as const\nconst visible = shallowReactive({\n top: false,\n bottom: false,\n left: false,\n right: false,\n})\nconst styles = shallowRef<Partial<Record<ScrollbarDirection, CSSProperties>>>(\n {}\n)\n\nconst handleScroll = () => {\n const wrap = scrollbar.wrapElement\n if (!wrap) return\n\n const {\n clientHeight,\n scrollHeight,\n scrollTop,\n clientWidth,\n scrollWidth,\n scrollLeft,\n } = wrap\n // Scroll offsets may be fractional, whereas scroll and client sizes are rounded.\n const maxTop = scrollHeight - clientHeight\n const maxLeft = scrollWidth - clientWidth\n const hasVerticalOverflow = clientHeight > 0 && maxTop > 1\n const hasHorizontalOverflow = clientWidth > 0 && maxLeft > 1\n let left = scrollLeft\n if (hasHorizontalOverflow && getStyle(wrap, 'direction') === 'rtl') {\n // Normalize the browser's RTL offset to the distance from the physical left.\n switch (getRTLOffsetType()) {\n case 'negative':\n left = maxLeft + scrollLeft\n break\n case 'positive-ascending':\n left = maxLeft - scrollLeft\n break\n }\n }\n\n visible.top = hasVerticalOverflow && scrollTop > 1\n visible.bottom = hasVerticalOverflow && maxTop - scrollTop > 1\n visible.left = hasHorizontalOverflow && left > 1\n visible.right = hasHorizontalOverflow && maxLeft - left > 1\n}\n\nconst update = () => {\n const { wrapElement: wrap, scrollbarElement } = scrollbar\n if (!wrap || !scrollbarElement) return\n\n // Align with the viewport, excluding native scrollbars and any wrap border.\n const {\n offsetLeft,\n offsetTop,\n clientLeft,\n clientTop,\n clientWidth,\n clientHeight,\n } = wrap\n const left = offsetLeft + clientLeft\n const top = offsetTop + clientTop\n const verticalStyle = {\n left: `${left}px`,\n width: `${clientWidth}px`,\n maxHeight: `${clientHeight}px`,\n }\n const horizontalStyle = {\n top: `${top}px`,\n height: `${clientHeight}px`,\n maxWidth: `${clientWidth}px`,\n }\n styles.value = {\n top: { ...verticalStyle, top: `${top}px` },\n bottom: {\n ...verticalStyle,\n bottom: `${scrollbarElement.clientHeight - top - clientHeight}px`,\n },\n left: { ...horizontalStyle, left: `${left}px` },\n right: {\n ...horizontalStyle,\n right: `${scrollbarElement.clientWidth - left - clientWidth}px`,\n },\n }\n handleScroll()\n}\n\ndefineExpose({ update, handleScroll })\n</script>\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ScrollbarProps } from "./scrollbar.js";
2
+ import * as _$vue from "vue";
3
+
4
+ //#region ../../packages/components/scrollbar/src/mask.vue.d.ts
5
+ type __VLS_Props = {
6
+ mask: ScrollbarProps['mask'];
7
+ };
8
+ declare const __VLS_export: _$vue.DefineComponent<__VLS_Props, {
9
+ update: () => void;
10
+ handleScroll: () => void;
11
+ }, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
13
+ //#endregion
14
+ export { _default as default };
@@ -0,0 +1,113 @@
1
+ const require_style = require("../../../utils/dom/style.js");
2
+ const require_index = require("../../../hooks/use-namespace/index.js");
3
+ const require_constants = require("./constants.js");
4
+ const require_mask_utils = require("./mask-utils.js");
5
+ let vue = require("vue");
6
+ //#region ../../packages/components/scrollbar/src/mask.vue?vue&type=script&setup=true&lang.ts
7
+ var mask_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vue.defineComponent)({
8
+ __name: "mask",
9
+ props: { mask: {
10
+ type: [Boolean, String],
11
+ required: true
12
+ } },
13
+ setup(__props, { expose: __expose }) {
14
+ const ns = require_index.useNamespace("scrollbar");
15
+ const scrollbar = (0, vue.inject)(require_constants.scrollbarContextKey);
16
+ const edges = [
17
+ "top",
18
+ "bottom",
19
+ "left",
20
+ "right"
21
+ ];
22
+ const visible = (0, vue.shallowReactive)({
23
+ top: false,
24
+ bottom: false,
25
+ left: false,
26
+ right: false
27
+ });
28
+ const styles = (0, vue.shallowRef)({});
29
+ const handleScroll = () => {
30
+ const wrap = scrollbar.wrapElement;
31
+ if (!wrap) return;
32
+ const { clientHeight, scrollHeight, scrollTop, clientWidth, scrollWidth, scrollLeft } = wrap;
33
+ const maxTop = scrollHeight - clientHeight;
34
+ const maxLeft = scrollWidth - clientWidth;
35
+ const hasVerticalOverflow = clientHeight > 0 && maxTop > 1;
36
+ const hasHorizontalOverflow = clientWidth > 0 && maxLeft > 1;
37
+ let left = scrollLeft;
38
+ if (hasHorizontalOverflow && require_style.getStyle(wrap, "direction") === "rtl") switch (require_mask_utils.getRTLOffsetType()) {
39
+ case "negative":
40
+ left = maxLeft + scrollLeft;
41
+ break;
42
+ case "positive-ascending": left = maxLeft - scrollLeft;
43
+ }
44
+ visible.top = hasVerticalOverflow && scrollTop > 1;
45
+ visible.bottom = hasVerticalOverflow && maxTop - scrollTop > 1;
46
+ visible.left = hasHorizontalOverflow && left > 1;
47
+ visible.right = hasHorizontalOverflow && maxLeft - left > 1;
48
+ };
49
+ const update = () => {
50
+ const { wrapElement: wrap, scrollbarElement } = scrollbar;
51
+ if (!wrap || !scrollbarElement) return;
52
+ const { offsetLeft, offsetTop, clientLeft, clientTop, clientWidth, clientHeight } = wrap;
53
+ const left = offsetLeft + clientLeft;
54
+ const top = offsetTop + clientTop;
55
+ const verticalStyle = {
56
+ left: `${left}px`,
57
+ width: `${clientWidth}px`,
58
+ maxHeight: `${clientHeight}px`
59
+ };
60
+ const horizontalStyle = {
61
+ top: `${top}px`,
62
+ height: `${clientHeight}px`,
63
+ maxWidth: `${clientWidth}px`
64
+ };
65
+ styles.value = {
66
+ top: {
67
+ ...verticalStyle,
68
+ top: `${top}px`
69
+ },
70
+ bottom: {
71
+ ...verticalStyle,
72
+ bottom: `${scrollbarElement.clientHeight - top - clientHeight}px`
73
+ },
74
+ left: {
75
+ ...horizontalStyle,
76
+ left: `${left}px`
77
+ },
78
+ right: {
79
+ ...horizontalStyle,
80
+ right: `${scrollbarElement.clientWidth - left - clientWidth}px`
81
+ }
82
+ };
83
+ handleScroll();
84
+ };
85
+ __expose({
86
+ update,
87
+ handleScroll
88
+ });
89
+ return (_ctx, _cache) => {
90
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
91
+ class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("mask")),
92
+ "aria-hidden": "true"
93
+ }, [((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(edges, (edge) => {
94
+ return (0, vue.createVNode)(vue.Transition, {
95
+ key: edge,
96
+ name: (0, vue.unref)(ns).b("mask-fade")
97
+ }, {
98
+ default: (0, vue.withCtx)(() => [__props.mask === true || __props.mask === edge ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
99
+ key: 0,
100
+ class: (0, vue.normalizeClass)((0, vue.unref)(ns).e(`${edge}-mask`)),
101
+ style: (0, vue.normalizeStyle)(styles.value[edge]),
102
+ "aria-hidden": "true"
103
+ }, null, 6)), [[vue.vShow, (0, vue.unref)(visible)[edge]]]) : (0, vue.createCommentVNode)("v-if", true)]),
104
+ _: 2
105
+ }, 1032, ["name"]);
106
+ }), 64))], 2);
107
+ };
108
+ }
109
+ });
110
+ //#endregion
111
+ exports.default = mask_vue_vue_type_script_setup_true_lang_default;
112
+
113
+ //# sourceMappingURL=mask.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/scrollbar/src/mask.vue"],"sourcesContent":["<template>\n <div :class=\"ns.e('mask')\" aria-hidden=\"true\">\n <transition v-for=\"edge in edges\" :key=\"edge\" :name=\"ns.b('mask-fade')\">\n <div\n v-if=\"mask === true || mask === edge\"\n v-show=\"visible[edge]\"\n :class=\"ns.e(`${edge}-mask`)\"\n :style=\"styles[edge]\"\n aria-hidden=\"true\"\n />\n </transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject, shallowReactive, shallowRef } from 'vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { getStyle } from '@element-plus/utils'\nimport { scrollbarContextKey } from './constants'\nimport { getRTLOffsetType } from './mask-utils'\n\nimport type { CSSProperties } from 'vue'\nimport type { ScrollbarDirection, ScrollbarProps } from './scrollbar'\n\ndefineProps<{\n mask: ScrollbarProps['mask']\n}>()\n\nconst ns = useNamespace('scrollbar')\nconst scrollbar = inject(scrollbarContextKey)!\nconst edges = ['top', 'bottom', 'left', 'right'] as const\nconst visible = shallowReactive({\n top: false,\n bottom: false,\n left: false,\n right: false,\n})\nconst styles = shallowRef<Partial<Record<ScrollbarDirection, CSSProperties>>>(\n {}\n)\n\nconst handleScroll = () => {\n const wrap = scrollbar.wrapElement\n if (!wrap) return\n\n const {\n clientHeight,\n scrollHeight,\n scrollTop,\n clientWidth,\n scrollWidth,\n scrollLeft,\n } = wrap\n // Scroll offsets may be fractional, whereas scroll and client sizes are rounded.\n const maxTop = scrollHeight - clientHeight\n const maxLeft = scrollWidth - clientWidth\n const hasVerticalOverflow = clientHeight > 0 && maxTop > 1\n const hasHorizontalOverflow = clientWidth > 0 && maxLeft > 1\n let left = scrollLeft\n if (hasHorizontalOverflow && getStyle(wrap, 'direction') === 'rtl') {\n // Normalize the browser's RTL offset to the distance from the physical left.\n switch (getRTLOffsetType()) {\n case 'negative':\n left = maxLeft + scrollLeft\n break\n case 'positive-ascending':\n left = maxLeft - scrollLeft\n break\n }\n }\n\n visible.top = hasVerticalOverflow && scrollTop > 1\n visible.bottom = hasVerticalOverflow && maxTop - scrollTop > 1\n visible.left = hasHorizontalOverflow && left > 1\n visible.right = hasHorizontalOverflow && maxLeft - left > 1\n}\n\nconst update = () => {\n const { wrapElement: wrap, scrollbarElement } = scrollbar\n if (!wrap || !scrollbarElement) return\n\n // Align with the viewport, excluding native scrollbars and any wrap border.\n const {\n offsetLeft,\n offsetTop,\n clientLeft,\n clientTop,\n clientWidth,\n clientHeight,\n } = wrap\n const left = offsetLeft + clientLeft\n const top = offsetTop + clientTop\n const verticalStyle = {\n left: `${left}px`,\n width: `${clientWidth}px`,\n maxHeight: `${clientHeight}px`,\n }\n const horizontalStyle = {\n top: `${top}px`,\n height: `${clientHeight}px`,\n maxWidth: `${clientWidth}px`,\n }\n styles.value = {\n top: { ...verticalStyle, top: `${top}px` },\n bottom: {\n ...verticalStyle,\n bottom: `${scrollbarElement.clientHeight - top - clientHeight}px`,\n },\n left: { ...horizontalStyle, left: `${left}px` },\n right: {\n ...horizontalStyle,\n right: `${scrollbarElement.clientWidth - left - clientWidth}px`,\n },\n }\n handleScroll()\n}\n\ndefineExpose({ update, handleScroll })\n</script>\n"],"mappings":"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"}
@@ -58,6 +58,11 @@ interface ScrollbarProps {
58
58
  * @description always show
59
59
  */
60
60
  always?: boolean;
61
+ /**
62
+ * @description show gradient masks at all edges or at the specified edge while more content can be scrolled to
63
+ * @default false
64
+ */
65
+ mask?: boolean | ScrollbarDirection;
61
66
  /**
62
67
  * @description minimum size of scrollbar
63
68
  * @default 20
@@ -107,6 +112,7 @@ declare const scrollbarProps: {
107
112
  readonly noresize: BooleanConstructor;
108
113
  readonly tag: EpPropFinalized<StringConstructor, unknown, unknown, "div", boolean>;
109
114
  readonly always: BooleanConstructor;
115
+ readonly mask: EpPropFinalized<readonly [BooleanConstructor, StringConstructor], boolean | "left" | "right" | "top" | "bottom", unknown, false, boolean>;
110
116
  readonly minSize: EpPropFinalized<NumberConstructor, unknown, unknown, 20, boolean>;
111
117
  readonly tabindex: EpPropFinalized<readonly [StringConstructor, NumberConstructor], unknown, unknown, undefined, boolean>;
112
118
  readonly id: StringConstructor;
@@ -96,6 +96,21 @@ const scrollbarProps = require_runtime.buildProps({
96
96
  */
97
97
  always: Boolean,
98
98
  /**
99
+ * @description show gradient masks at all edges or at the specified edge while more content can be scrolled to
100
+ */
101
+ mask: {
102
+ type: [Boolean, String],
103
+ values: [
104
+ true,
105
+ false,
106
+ "top",
107
+ "bottom",
108
+ "left",
109
+ "right"
110
+ ],
111
+ default: false
112
+ },
113
+ /**
99
114
  * @description minimum size of scrollbar
100
115
  */
101
116
  minSize: {
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbar.js","names":["buildProps","definePropType","useAriaProps","isNumber"],"sources":["../../../../../../packages/components/scrollbar/src/scrollbar.ts"],"sourcesContent":["import { buildProps, definePropType, isNumber } from '@element-plus/utils'\nimport { useAriaProps } from '@element-plus/hooks'\n\nimport type { ClassValue } from '@element-plus/utils'\nimport type { ExtractPublicPropTypes, StyleValue } from 'vue'\nimport type Scrollbar from './scrollbar.vue'\n\nexport interface ScrollbarProps {\n /**\n * @description trigger distance(px)\n * @default 0\n */\n distance?: number\n /**\n * @description height of scrollbar\n * @default ''\n */\n height?: number | string\n /**\n * @description max height of scrollbar\n * @default ''\n */\n maxHeight?: number | string\n /**\n * @description whether to use the native scrollbar\n */\n native?: boolean\n /**\n * @description style of wrap\n * @default ''\n */\n wrapStyle?: StyleValue\n /**\n * @description class of wrap\n * @default ''\n */\n wrapClass?: ClassValue\n /**\n * @description class of view\n * @default ''\n */\n viewClass?: ClassValue\n /**\n * @description style of view\n * @default ''\n */\n viewStyle?: StyleValue\n /**\n * @description do not respond to container size changes, if the container size does not change, it is better to set it to optimize performance\n */\n noresize?: boolean\n /**\n * @description element tag of the view\n * @default 'div'\n */\n tag?: keyof HTMLElementTagNameMap | (string & {})\n /**\n * @description always show\n */\n always?: boolean\n /**\n * @description minimum size of scrollbar\n * @default 20\n */\n minSize?: number\n /**\n * @description Wrap tabindex\n * @default undefined\n */\n tabindex?: number | string\n /**\n * @description id of view\n */\n id?: string\n /**\n * @description role of view\n */\n role?: string\n /**\n * @description native `aria-label` attribute\n */\n ariaLabel?: string\n /**\n * @description native `aria-orientation` attribute\n */\n ariaOrientation?: 'horizontal' | 'vertical' | 'undefined'\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `ScrollbarProps` instead.\n */\nexport const scrollbarProps = buildProps({\n /**\n * @description trigger distance(px)\n */\n distance: {\n type: Number,\n default: 0,\n },\n /**\n * @description height of scrollbar\n */\n height: {\n type: [String, Number],\n default: '',\n },\n /**\n * @description max height of scrollbar\n */\n maxHeight: {\n type: [String, Number],\n default: '',\n },\n /**\n * @description whether to use the native scrollbar\n */\n native: Boolean,\n /**\n * @description style of wrap\n */\n wrapStyle: {\n type: definePropType<StyleValue>([String, Object, Array, Boolean]),\n default: '',\n },\n /**\n * @description class of wrap\n */\n wrapClass: {\n type: definePropType<ClassValue>([String, Array, Object, Boolean]),\n default: '',\n },\n /**\n * @description class of view\n */\n viewClass: {\n type: definePropType<ClassValue>([String, Array, Object, Boolean]),\n default: '',\n },\n /**\n * @description style of view\n */\n viewStyle: {\n type: definePropType<StyleValue>([String, Object, Array, Boolean]),\n default: '',\n },\n /**\n * @description do not respond to container size changes, if the container size does not change, it is better to set it to optimize performance\n */\n noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n /**\n * @description element tag of the view\n */\n tag: {\n type: String,\n default: 'div',\n },\n /**\n * @description always show\n */\n always: Boolean,\n /**\n * @description minimum size of scrollbar\n */\n minSize: {\n type: Number,\n default: 20,\n },\n /**\n * @description Wrap tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n /**\n * @description id of view\n */\n id: String,\n /**\n * @description role of view\n */\n role: String,\n ...useAriaProps(['ariaLabel', 'ariaOrientation']),\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `ScrollbarProps` instead.\n */\nexport type ScrollbarPropsPublic = ExtractPublicPropTypes<typeof scrollbarProps>\n\nexport const scrollbarEmits = {\n 'end-reached': (direction: ScrollbarDirection) =>\n ['left', 'right', 'top', 'bottom'].includes(direction),\n scroll: ({\n scrollTop,\n scrollLeft,\n }: {\n scrollTop: number\n scrollLeft: number\n }) => [scrollTop, scrollLeft].every(isNumber),\n}\nexport type ScrollbarEmits = typeof scrollbarEmits\nexport type ScrollbarDirection = 'top' | 'bottom' | 'left' | 'right'\n\nexport type ScrollbarInstance = InstanceType<typeof Scrollbar> & unknown\n"],"mappings":";;;;;;;;AA2FA,MAAa,iBAAiBA,gBAAAA,WAAW;;;;CAIvC,UAAU;EACR,MAAM;EACN,SAAS;CACX;;;;CAIA,QAAQ;EACN,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS;CACX;;;;CAIA,QAAQ;;;;CAIR,WAAW;EACT,MAAMC,gBAAAA,eAA2B;GAAC;GAAQ;GAAQ;GAAO;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAMA,gBAAAA,eAA2B;GAAC;GAAQ;GAAO;GAAQ;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAMA,gBAAAA,eAA2B;GAAC;GAAQ;GAAO;GAAQ;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAMA,gBAAAA,eAA2B;GAAC;GAAQ;GAAQ;GAAO;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,UAAU;;;;CAIV,KAAK;EACH,MAAM;EACN,SAAS;CACX;;;;CAIA,QAAQ;;;;CAIR,SAAS;EACP,MAAM;EACN,SAAS;CACX;;;;CAIA,UAAU;EACR,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS,KAAA;CACX;;;;CAIA,IAAI;;;;CAIJ,MAAM;CACN,GAAGC,cAAAA,aAAa,CAAC,aAAa,iBAAiB,CAAC;AAClD,CAAU;AAOV,MAAa,iBAAiB;CAC5B,gBAAgB,cACd;EAAC;EAAQ;EAAS;EAAO;CAAQ,CAAC,CAAC,SAAS,SAAS;CACvD,SAAS,EACP,WACA,iBAII,CAAC,WAAW,UAAU,CAAC,CAAC,MAAMC,cAAAA,QAAQ;AAC9C"}
1
+ {"version":3,"file":"scrollbar.js","names":["buildProps","definePropType","useAriaProps","isNumber"],"sources":["../../../../../../packages/components/scrollbar/src/scrollbar.ts"],"sourcesContent":["import { buildProps, definePropType, isNumber } from '@element-plus/utils'\nimport { useAriaProps } from '@element-plus/hooks'\n\nimport type { ClassValue } from '@element-plus/utils'\nimport type { ExtractPublicPropTypes, StyleValue } from 'vue'\nimport type Scrollbar from './scrollbar.vue'\n\nexport interface ScrollbarProps {\n /**\n * @description trigger distance(px)\n * @default 0\n */\n distance?: number\n /**\n * @description height of scrollbar\n * @default ''\n */\n height?: number | string\n /**\n * @description max height of scrollbar\n * @default ''\n */\n maxHeight?: number | string\n /**\n * @description whether to use the native scrollbar\n */\n native?: boolean\n /**\n * @description style of wrap\n * @default ''\n */\n wrapStyle?: StyleValue\n /**\n * @description class of wrap\n * @default ''\n */\n wrapClass?: ClassValue\n /**\n * @description class of view\n * @default ''\n */\n viewClass?: ClassValue\n /**\n * @description style of view\n * @default ''\n */\n viewStyle?: StyleValue\n /**\n * @description do not respond to container size changes, if the container size does not change, it is better to set it to optimize performance\n */\n noresize?: boolean\n /**\n * @description element tag of the view\n * @default 'div'\n */\n tag?: keyof HTMLElementTagNameMap | (string & {})\n /**\n * @description always show\n */\n always?: boolean\n /**\n * @description show gradient masks at all edges or at the specified edge while more content can be scrolled to\n * @default false\n */\n mask?: boolean | ScrollbarDirection\n /**\n * @description minimum size of scrollbar\n * @default 20\n */\n minSize?: number\n /**\n * @description Wrap tabindex\n * @default undefined\n */\n tabindex?: number | string\n /**\n * @description id of view\n */\n id?: string\n /**\n * @description role of view\n */\n role?: string\n /**\n * @description native `aria-label` attribute\n */\n ariaLabel?: string\n /**\n * @description native `aria-orientation` attribute\n */\n ariaOrientation?: 'horizontal' | 'vertical' | 'undefined'\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `ScrollbarProps` instead.\n */\nexport const scrollbarProps = buildProps({\n /**\n * @description trigger distance(px)\n */\n distance: {\n type: Number,\n default: 0,\n },\n /**\n * @description height of scrollbar\n */\n height: {\n type: [String, Number],\n default: '',\n },\n /**\n * @description max height of scrollbar\n */\n maxHeight: {\n type: [String, Number],\n default: '',\n },\n /**\n * @description whether to use the native scrollbar\n */\n native: Boolean,\n /**\n * @description style of wrap\n */\n wrapStyle: {\n type: definePropType<StyleValue>([String, Object, Array, Boolean]),\n default: '',\n },\n /**\n * @description class of wrap\n */\n wrapClass: {\n type: definePropType<ClassValue>([String, Array, Object, Boolean]),\n default: '',\n },\n /**\n * @description class of view\n */\n viewClass: {\n type: definePropType<ClassValue>([String, Array, Object, Boolean]),\n default: '',\n },\n /**\n * @description style of view\n */\n viewStyle: {\n type: definePropType<StyleValue>([String, Object, Array, Boolean]),\n default: '',\n },\n /**\n * @description do not respond to container size changes, if the container size does not change, it is better to set it to optimize performance\n */\n noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n /**\n * @description element tag of the view\n */\n tag: {\n type: String,\n default: 'div',\n },\n /**\n * @description always show\n */\n always: Boolean,\n /**\n * @description show gradient masks at all edges or at the specified edge while more content can be scrolled to\n */\n mask: {\n type: [Boolean, String],\n values: [true, false, 'top', 'bottom', 'left', 'right'],\n default: false,\n },\n /**\n * @description minimum size of scrollbar\n */\n minSize: {\n type: Number,\n default: 20,\n },\n /**\n * @description Wrap tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n /**\n * @description id of view\n */\n id: String,\n /**\n * @description role of view\n */\n role: String,\n ...useAriaProps(['ariaLabel', 'ariaOrientation']),\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `ScrollbarProps` instead.\n */\nexport type ScrollbarPropsPublic = ExtractPublicPropTypes<typeof scrollbarProps>\n\nexport const scrollbarEmits = {\n 'end-reached': (direction: ScrollbarDirection) =>\n ['left', 'right', 'top', 'bottom'].includes(direction),\n scroll: ({\n scrollTop,\n scrollLeft,\n }: {\n scrollTop: number\n scrollLeft: number\n }) => [scrollTop, scrollLeft].every(isNumber),\n}\nexport type ScrollbarEmits = typeof scrollbarEmits\nexport type ScrollbarDirection = 'top' | 'bottom' | 'left' | 'right'\n\nexport type ScrollbarInstance = InstanceType<typeof Scrollbar> & unknown\n"],"mappings":";;;;;;;;AAgGA,MAAa,iBAAiBA,gBAAAA,WAAW;;;;CAIvC,UAAU;EACR,MAAM;EACN,SAAS;CACX;;;;CAIA,QAAQ;EACN,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS;CACX;;;;CAIA,QAAQ;;;;CAIR,WAAW;EACT,MAAMC,gBAAAA,eAA2B;GAAC;GAAQ;GAAQ;GAAO;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAMA,gBAAAA,eAA2B;GAAC;GAAQ;GAAO;GAAQ;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAMA,gBAAAA,eAA2B;GAAC;GAAQ;GAAO;GAAQ;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,WAAW;EACT,MAAMA,gBAAAA,eAA2B;GAAC;GAAQ;GAAQ;GAAO;EAAO,CAAC;EACjE,SAAS;CACX;;;;CAIA,UAAU;;;;CAIV,KAAK;EACH,MAAM;EACN,SAAS;CACX;;;;CAIA,QAAQ;;;;CAIR,MAAM;EACJ,MAAM,CAAC,SAAS,MAAM;EACtB,QAAQ;GAAC;GAAM;GAAO;GAAO;GAAU;GAAQ;EAAO;EACtD,SAAS;CACX;;;;CAIA,SAAS;EACP,MAAM;EACN,SAAS;CACX;;;;CAIA,UAAU;EACR,MAAM,CAAC,QAAQ,MAAM;EACrB,SAAS,KAAA;CACX;;;;CAIA,IAAI;;;;CAIJ,MAAM;CACN,GAAGC,cAAAA,aAAa,CAAC,aAAa,iBAAiB,CAAC;AAClD,CAAU;AAOV,MAAa,iBAAiB;CAC5B,gBAAgB,cACd;EAAC;EAAQ;EAAS;EAAO;CAAQ,CAAC,CAAC,SAAS,SAAS;CACvD,SAAS,EACP,WACA,iBAII,CAAC,WAAW,UAAU,CAAC,CAAC,MAAMC,cAAAA,QAAQ;AAC9C"}
@@ -32,6 +32,7 @@ declare const __VLS_base: _$vue.DefineComponent<ScrollbarProps, {
32
32
  }>, {
33
33
  tabindex: string | number;
34
34
  height: string | number;
35
+ mask: boolean | ScrollbarDirection;
35
36
  maxHeight: string | number;
36
37
  tag: (string & {}) | keyof HTMLElementTagNameMap;
37
38
  distance: number;
@@ -6,6 +6,7 @@ const require_index = require("../../../hooks/use-namespace/index.js");
6
6
  const require_scrollbar = require("./scrollbar.js");
7
7
  const require_constants = require("./constants.js");
8
8
  const require_bar = require("./bar2.js");
9
+ const require_mask = require("./mask.js");
9
10
  let _vueuse_core = require("@vueuse/core");
10
11
  let vue = require("vue");
11
12
  let _vue_shared = require("@vue/shared");
@@ -38,6 +39,7 @@ var scrollbar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vu
38
39
  const wrapRef = (0, vue.ref)();
39
40
  const resizeRef = (0, vue.ref)();
40
41
  const barRef = (0, vue.ref)();
42
+ const maskRef = (0, vue.ref)();
41
43
  const wrapStyle = (0, vue.computed)(() => {
42
44
  const style = {};
43
45
  const height = require_style.addUnit(props.height);
@@ -76,6 +78,7 @@ var scrollbar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vu
76
78
  const handleScroll = () => {
77
79
  if (wrapRef.value) {
78
80
  barRef.value?.handleScroll(wrapRef.value);
81
+ maskRef.value?.handleScroll();
79
82
  const prevTop = wrapScrollTop;
80
83
  const prevLeft = wrapScrollLeft;
81
84
  wrapScrollTop = wrapRef.value.scrollTop;
@@ -119,6 +122,7 @@ var scrollbar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vu
119
122
  };
120
123
  const update = () => {
121
124
  barRef.value?.update();
125
+ maskRef.value?.update();
122
126
  distanceScrollState[direction] = false;
123
127
  if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value);
124
128
  };
@@ -129,6 +133,7 @@ var scrollbar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vu
129
133
  if (!wrapRef.value) return;
130
134
  barRef.value?.update();
131
135
  barRef.value?.handleScroll(wrapRef.value);
136
+ maskRef.value?.update();
132
137
  });
133
138
  };
134
139
  (0, vue.watch)(() => props.noresize, (noresize) => {
@@ -143,7 +148,7 @@ var scrollbar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vu
143
148
  }
144
149
  }, { immediate: true });
145
150
  (0, vue.watch)(() => [props.maxHeight, props.height], () => {
146
- if (!props.native) (0, vue.nextTick)(() => {
151
+ if (!props.native || props.mask) (0, vue.nextTick)(() => {
147
152
  update();
148
153
  });
149
154
  });
@@ -155,10 +160,11 @@ var scrollbar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vu
155
160
  if (wrapRef.value) {
156
161
  wrapRef.value.scrollTop = wrapScrollTop;
157
162
  wrapRef.value.scrollLeft = wrapScrollLeft;
163
+ maskRef.value?.update();
158
164
  }
159
165
  });
160
166
  (0, vue.onMounted)(() => {
161
- if (!props.native) (0, vue.nextTick)(() => {
167
+ if (!props.native || props.mask) (0, vue.nextTick)(() => {
162
168
  update();
163
169
  });
164
170
  });
@@ -182,41 +188,53 @@ var scrollbar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vu
182
188
  ref_key: "scrollbarRef",
183
189
  ref: scrollbarRef,
184
190
  class: (0, vue.normalizeClass)((0, vue.unref)(ns).b())
185
- }, [(0, vue.createElementVNode)("div", {
186
- ref_key: "wrapRef",
187
- ref: wrapRef,
188
- class: (0, vue.normalizeClass)(wrapKls.value),
189
- style: (0, vue.normalizeStyle)(wrapStyle.value),
190
- tabindex: __props.tabindex,
191
- onScroll: handleScroll,
192
- onTransitionend: updateBar,
193
- onAnimationend: updateBar
194
- }, [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
195
- id: __props.id,
196
- ref_key: "resizeRef",
197
- ref: resizeRef,
198
- class: (0, vue.normalizeClass)(resizeKls.value),
199
- style: (0, vue.normalizeStyle)(__props.viewStyle),
200
- role: __props.role,
201
- "aria-label": __props.ariaLabel,
202
- "aria-orientation": __props.ariaOrientation
203
- }, {
204
- default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
205
- _: 3
206
- }, 8, [
207
- "id",
208
- "class",
209
- "style",
210
- "role",
211
- "aria-label",
212
- "aria-orientation"
213
- ]))], 46, _hoisted_1), !__props.native ? ((0, vue.openBlock)(), (0, vue.createBlock)(require_bar.default, {
214
- key: 0,
215
- ref_key: "barRef",
216
- ref: barRef,
217
- always: __props.always,
218
- "min-size": __props.minSize
219
- }, null, 8, ["always", "min-size"])) : (0, vue.createCommentVNode)("v-if", true)], 2);
191
+ }, [
192
+ (0, vue.createElementVNode)("div", {
193
+ ref_key: "wrapRef",
194
+ ref: wrapRef,
195
+ class: (0, vue.normalizeClass)(wrapKls.value),
196
+ style: (0, vue.normalizeStyle)(wrapStyle.value),
197
+ tabindex: __props.tabindex,
198
+ onScroll: handleScroll,
199
+ onTransitionend: updateBar,
200
+ onAnimationend: updateBar
201
+ }, [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
202
+ id: __props.id,
203
+ ref_key: "resizeRef",
204
+ ref: resizeRef,
205
+ class: (0, vue.normalizeClass)(resizeKls.value),
206
+ style: (0, vue.normalizeStyle)(__props.viewStyle),
207
+ role: __props.role,
208
+ "aria-label": __props.ariaLabel,
209
+ "aria-orientation": __props.ariaOrientation
210
+ }, {
211
+ default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
212
+ _: 3
213
+ }, 8, [
214
+ "id",
215
+ "class",
216
+ "style",
217
+ "role",
218
+ "aria-label",
219
+ "aria-orientation"
220
+ ]))], 46, _hoisted_1),
221
+ (0, vue.createVNode)(vue.Transition, { name: (0, vue.unref)(ns).b("mask-fade") }, {
222
+ default: (0, vue.withCtx)(() => [__props.mask ? ((0, vue.openBlock)(), (0, vue.createBlock)(require_mask.default, {
223
+ key: 0,
224
+ ref_key: "maskRef",
225
+ ref: maskRef,
226
+ mask: __props.mask
227
+ }, null, 8, ["mask"])) : (0, vue.createCommentVNode)("v-if", true)]),
228
+ _: 1
229
+ }, 8, ["name"]),
230
+ !__props.native ? ((0, vue.openBlock)(), (0, vue.createBlock)(require_bar.default, {
231
+ key: 0,
232
+ ref_key: "barRef",
233
+ ref: barRef,
234
+ always: __props.always,
235
+ "min-size": __props.minSize
236
+ }, null, 8, ["always", "min-size"])) : (0, vue.createCommentVNode)("v-if", true)
237
+ ], 2);
220
238
  };
221
239
  }
222
240
  });
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<template>\n <div ref=\"scrollbarRef\" :class=\"ns.b()\">\n <div\n ref=\"wrapRef\"\n :class=\"wrapKls\"\n :style=\"wrapStyle\"\n :tabindex=\"tabindex\"\n @scroll=\"handleScroll\"\n @transitionend=\"updateBar\"\n @animationend=\"updateBar\"\n >\n <component\n :is=\"tag\"\n :id=\"id\"\n ref=\"resizeRef\"\n :class=\"resizeKls\"\n :style=\"viewStyle\"\n :role=\"role\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"ariaOrientation\"\n >\n <slot />\n </component>\n </div>\n <template v-if=\"!native\">\n <bar ref=\"barRef\" :always=\"always\" :min-size=\"minSize\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onActivated,\n onMounted,\n onUpdated,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport { useEventListener, useResizeObserver } from '@vueuse/core'\nimport {\n addUnit,\n debugWarn,\n isGreaterThan,\n isNumber,\n isObject,\n} from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport Bar from './bar.vue'\nimport { scrollbarContextKey } from './constants'\nimport { scrollbarEmits } from './scrollbar'\n\nimport type { ScrollbarDirection, ScrollbarProps } from './scrollbar'\nimport type { BarInstance } from './bar'\nimport type { CSSProperties, StyleValue } from 'vue'\n\nconst COMPONENT_NAME = 'ElScrollbar'\n\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = withDefaults(defineProps<ScrollbarProps>(), {\n distance: 0,\n height: '',\n maxHeight: '',\n wrapStyle: '',\n wrapClass: '',\n viewStyle: '',\n viewClass: '',\n tag: 'div',\n minSize: 20,\n tabindex: undefined,\n})\nconst emit = defineEmits(scrollbarEmits)\n\nconst ns = useNamespace('scrollbar')\n\nlet stopResizeObserver: (() => void) | undefined = undefined\nlet stopWrapResizeObserver: (() => void) | undefined = undefined\nlet stopResizeListener: (() => void) | undefined = undefined\nlet rafId = 0\nlet wrapScrollTop = 0\nlet wrapScrollLeft = 0\nlet direction = '' as ScrollbarDirection\nconst distanceScrollState = {\n bottom: false,\n top: false,\n right: false,\n left: false,\n}\n\nconst scrollbarRef = ref<HTMLDivElement>()\nconst wrapRef = ref<HTMLDivElement>()\nconst resizeRef = ref<HTMLElement>()\nconst barRef = ref<BarInstance>()\n\nconst wrapStyle = computed<StyleValue>(() => {\n const style: CSSProperties = {}\n const height = addUnit(props.height)\n const maxHeight = addUnit(props.maxHeight)\n if (height) style.height = height\n if (maxHeight) style.maxHeight = maxHeight\n return [props.wrapStyle, style]\n})\n\nconst wrapKls = computed(() => {\n return [\n props.wrapClass,\n ns.e('wrap'),\n { [ns.em('wrap', 'hidden-default')]: !props.native },\n ]\n})\n\nconst resizeKls = computed(() => {\n return [ns.e('view'), props.viewClass]\n})\n\nconst shouldSkipDirection = (direction: ScrollbarDirection) => {\n return distanceScrollState[direction] ?? false\n}\n\nconst DIRECTION_PAIRS: Record<ScrollbarDirection, ScrollbarDirection> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\nconst updateTriggerStatus = (arrivedStates: Record<string, boolean>) => {\n const oppositeDirection = DIRECTION_PAIRS[direction]\n if (!oppositeDirection) return\n\n const arrived = arrivedStates[direction]\n const oppositeArrived = arrivedStates[oppositeDirection]\n\n if (arrived && !distanceScrollState[direction]) {\n distanceScrollState[direction] = true\n }\n\n if (!oppositeArrived && distanceScrollState[oppositeDirection]) {\n distanceScrollState[oppositeDirection] = false\n }\n}\n\nconst handleScroll = () => {\n if (wrapRef.value) {\n barRef.value?.handleScroll(wrapRef.value)\n const prevTop = wrapScrollTop\n const prevLeft = wrapScrollLeft\n wrapScrollTop = wrapRef.value.scrollTop\n wrapScrollLeft = wrapRef.value.scrollLeft\n\n const arrivedStates = {\n bottom: !isGreaterThan(\n wrapRef.value.scrollHeight - props.distance,\n wrapRef.value.clientHeight + wrapScrollTop\n ),\n top: wrapScrollTop <= props.distance && prevTop !== 0,\n right:\n !isGreaterThan(\n wrapRef.value.scrollWidth - props.distance,\n wrapRef.value.clientWidth + wrapScrollLeft\n ) && prevLeft !== wrapScrollLeft,\n left: wrapScrollLeft <= props.distance && prevLeft !== 0,\n }\n\n emit('scroll', {\n scrollTop: wrapScrollTop,\n scrollLeft: wrapScrollLeft,\n })\n\n if (prevTop !== wrapScrollTop) {\n direction = wrapScrollTop > prevTop ? 'bottom' : 'top'\n }\n if (prevLeft !== wrapScrollLeft) {\n direction = wrapScrollLeft > prevLeft ? 'right' : 'left'\n }\n if (props.distance > 0) {\n if (shouldSkipDirection(direction)) {\n return\n }\n updateTriggerStatus(arrivedStates)\n }\n if (arrivedStates[direction]) emit('end-reached', direction)\n }\n}\n\nfunction scrollTo(xCord: number, yCord?: number): void\nfunction scrollTo(options: ScrollToOptions): void\nfunction scrollTo(arg1: unknown, arg2?: number) {\n if (isObject(arg1)) {\n wrapRef.value!.scrollTo(arg1)\n } else if (isNumber(arg1) && isNumber(arg2)) {\n wrapRef.value!.scrollTo(arg1, arg2)\n }\n}\n\nconst setScrollTop = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollTop = value\n}\n\nconst setScrollLeft = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollLeft = value\n}\n\nconst update = () => {\n barRef.value?.update()\n distanceScrollState[direction] = false\n if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value)\n}\n\n// Transform-driven overflow (e.g. slide transitions) is not observable via\n// resize observers, so refresh the bar when transitions/animations end —\n// this applies even when `noresize` is set.\nconst updateBar = () => {\n if (rafId) return\n rafId = requestAnimationFrame(() => {\n rafId = 0\n if (!wrapRef.value) return\n\n // Bar state may be stale even when the final scroll dimensions match a\n // previously seen value (e.g. `onUpdated` measured the transient\n // overflow mid-transition), so always refresh the bar here.\n barRef.value?.update()\n barRef.value?.handleScroll(wrapRef.value)\n })\n}\n\nwatch(\n () => props.noresize,\n (noresize) => {\n if (noresize) {\n stopResizeObserver?.()\n stopWrapResizeObserver?.()\n stopResizeListener?.()\n } else {\n ;({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update))\n ;({ stop: stopWrapResizeObserver } = useResizeObserver(wrapRef, update))\n stopResizeListener = useEventListener('resize', update)\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => [props.maxHeight, props.height],\n () => {\n if (!props.native)\n nextTick(() => {\n update()\n })\n }\n)\n\nprovide(\n scrollbarContextKey,\n reactive({\n scrollbarElement: scrollbarRef,\n wrapElement: wrapRef,\n })\n)\n\nonActivated(() => {\n if (wrapRef.value) {\n wrapRef.value.scrollTop = wrapScrollTop\n wrapRef.value.scrollLeft = wrapScrollLeft\n }\n})\n\nonMounted(() => {\n if (!props.native)\n nextTick(() => {\n update()\n })\n})\nonUpdated(() => update())\n\ndefineExpose({\n /** @description scrollbar wrap ref */\n wrapRef,\n /** @description update scrollbar state manually */\n update,\n /** @description scrolls to a particular set of coordinates */\n scrollTo,\n /** @description set distance to scroll top */\n setScrollTop,\n /** @description set distance to scroll left */\n setScrollLeft,\n /** @description handle scroll event */\n handleScroll,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"scrollbar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<template>\n <div ref=\"scrollbarRef\" :class=\"ns.b()\">\n <div\n ref=\"wrapRef\"\n :class=\"wrapKls\"\n :style=\"wrapStyle\"\n :tabindex=\"tabindex\"\n @scroll=\"handleScroll\"\n @transitionend=\"updateBar\"\n @animationend=\"updateBar\"\n >\n <component\n :is=\"tag\"\n :id=\"id\"\n ref=\"resizeRef\"\n :class=\"resizeKls\"\n :style=\"viewStyle\"\n :role=\"role\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"ariaOrientation\"\n >\n <slot />\n </component>\n </div>\n <transition :name=\"ns.b('mask-fade')\">\n <scrollbar-mask v-if=\"mask\" ref=\"maskRef\" :mask=\"mask\" />\n </transition>\n <template v-if=\"!native\">\n <bar ref=\"barRef\" :always=\"always\" :min-size=\"minSize\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onActivated,\n onMounted,\n onUpdated,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport { useEventListener, useResizeObserver } from '@vueuse/core'\nimport {\n addUnit,\n debugWarn,\n isGreaterThan,\n isNumber,\n isObject,\n} from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport Bar from './bar.vue'\nimport ScrollbarMask from './mask.vue'\nimport { scrollbarContextKey } from './constants'\nimport { scrollbarEmits } from './scrollbar'\n\nimport type { ScrollbarDirection, ScrollbarProps } from './scrollbar'\nimport type { BarInstance } from './bar'\nimport type { CSSProperties, StyleValue } from 'vue'\n\nconst COMPONENT_NAME = 'ElScrollbar'\n\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = withDefaults(defineProps<ScrollbarProps>(), {\n distance: 0,\n height: '',\n maxHeight: '',\n wrapStyle: '',\n wrapClass: '',\n viewStyle: '',\n viewClass: '',\n tag: 'div',\n mask: false,\n minSize: 20,\n tabindex: undefined,\n})\nconst emit = defineEmits(scrollbarEmits)\n\nconst ns = useNamespace('scrollbar')\n\nlet stopResizeObserver: (() => void) | undefined = undefined\nlet stopWrapResizeObserver: (() => void) | undefined = undefined\nlet stopResizeListener: (() => void) | undefined = undefined\nlet rafId = 0\nlet wrapScrollTop = 0\nlet wrapScrollLeft = 0\nlet direction = '' as ScrollbarDirection\nconst distanceScrollState = {\n bottom: false,\n top: false,\n right: false,\n left: false,\n}\n\nconst scrollbarRef = ref<HTMLDivElement>()\nconst wrapRef = ref<HTMLDivElement>()\nconst resizeRef = ref<HTMLElement>()\nconst barRef = ref<BarInstance>()\nconst maskRef = ref<InstanceType<typeof ScrollbarMask>>()\n\nconst wrapStyle = computed<StyleValue>(() => {\n const style: CSSProperties = {}\n const height = addUnit(props.height)\n const maxHeight = addUnit(props.maxHeight)\n if (height) style.height = height\n if (maxHeight) style.maxHeight = maxHeight\n return [props.wrapStyle, style]\n})\n\nconst wrapKls = computed(() => {\n return [\n props.wrapClass,\n ns.e('wrap'),\n { [ns.em('wrap', 'hidden-default')]: !props.native },\n ]\n})\n\nconst resizeKls = computed(() => {\n return [ns.e('view'), props.viewClass]\n})\n\nconst shouldSkipDirection = (direction: ScrollbarDirection) => {\n return distanceScrollState[direction] ?? false\n}\n\nconst DIRECTION_PAIRS: Record<ScrollbarDirection, ScrollbarDirection> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\nconst updateTriggerStatus = (arrivedStates: Record<string, boolean>) => {\n const oppositeDirection = DIRECTION_PAIRS[direction]\n if (!oppositeDirection) return\n\n const arrived = arrivedStates[direction]\n const oppositeArrived = arrivedStates[oppositeDirection]\n\n if (arrived && !distanceScrollState[direction]) {\n distanceScrollState[direction] = true\n }\n\n if (!oppositeArrived && distanceScrollState[oppositeDirection]) {\n distanceScrollState[oppositeDirection] = false\n }\n}\n\nconst handleScroll = () => {\n if (wrapRef.value) {\n barRef.value?.handleScroll(wrapRef.value)\n maskRef.value?.handleScroll()\n const prevTop = wrapScrollTop\n const prevLeft = wrapScrollLeft\n wrapScrollTop = wrapRef.value.scrollTop\n wrapScrollLeft = wrapRef.value.scrollLeft\n\n const arrivedStates = {\n bottom: !isGreaterThan(\n wrapRef.value.scrollHeight - props.distance,\n wrapRef.value.clientHeight + wrapScrollTop\n ),\n top: wrapScrollTop <= props.distance && prevTop !== 0,\n right:\n !isGreaterThan(\n wrapRef.value.scrollWidth - props.distance,\n wrapRef.value.clientWidth + wrapScrollLeft\n ) && prevLeft !== wrapScrollLeft,\n left: wrapScrollLeft <= props.distance && prevLeft !== 0,\n }\n\n emit('scroll', {\n scrollTop: wrapScrollTop,\n scrollLeft: wrapScrollLeft,\n })\n\n if (prevTop !== wrapScrollTop) {\n direction = wrapScrollTop > prevTop ? 'bottom' : 'top'\n }\n if (prevLeft !== wrapScrollLeft) {\n direction = wrapScrollLeft > prevLeft ? 'right' : 'left'\n }\n if (props.distance > 0) {\n if (shouldSkipDirection(direction)) {\n return\n }\n updateTriggerStatus(arrivedStates)\n }\n if (arrivedStates[direction]) emit('end-reached', direction)\n }\n}\n\nfunction scrollTo(xCord: number, yCord?: number): void\nfunction scrollTo(options: ScrollToOptions): void\nfunction scrollTo(arg1: unknown, arg2?: number) {\n if (isObject(arg1)) {\n wrapRef.value!.scrollTo(arg1)\n } else if (isNumber(arg1) && isNumber(arg2)) {\n wrapRef.value!.scrollTo(arg1, arg2)\n }\n}\n\nconst setScrollTop = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollTop = value\n}\n\nconst setScrollLeft = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollLeft = value\n}\n\nconst update = () => {\n barRef.value?.update()\n maskRef.value?.update()\n distanceScrollState[direction] = false\n if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value)\n}\n\n// Transform-driven overflow (e.g. slide transitions) is not observable via\n// resize observers, so refresh the bar when transitions/animations end —\n// this applies even when `noresize` is set.\nconst updateBar = () => {\n if (rafId) return\n rafId = requestAnimationFrame(() => {\n rafId = 0\n if (!wrapRef.value) return\n\n // Bar state may be stale even when the final scroll dimensions match a\n // previously seen value (e.g. `onUpdated` measured the transient\n // overflow mid-transition), so always refresh the bar here.\n barRef.value?.update()\n barRef.value?.handleScroll(wrapRef.value)\n maskRef.value?.update()\n })\n}\n\nwatch(\n () => props.noresize,\n (noresize) => {\n if (noresize) {\n stopResizeObserver?.()\n stopWrapResizeObserver?.()\n stopResizeListener?.()\n } else {\n ;({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update))\n ;({ stop: stopWrapResizeObserver } = useResizeObserver(wrapRef, update))\n stopResizeListener = useEventListener('resize', update)\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => [props.maxHeight, props.height],\n () => {\n if (!props.native || props.mask)\n nextTick(() => {\n update()\n })\n }\n)\n\nprovide(\n scrollbarContextKey,\n reactive({\n scrollbarElement: scrollbarRef,\n wrapElement: wrapRef,\n })\n)\n\nonActivated(() => {\n if (wrapRef.value) {\n wrapRef.value.scrollTop = wrapScrollTop\n wrapRef.value.scrollLeft = wrapScrollLeft\n maskRef.value?.update()\n }\n})\n\nonMounted(() => {\n if (!props.native || props.mask)\n nextTick(() => {\n update()\n })\n})\nonUpdated(() => update())\n\ndefineExpose({\n /** @description scrollbar wrap ref */\n wrapRef,\n /** @description update scrollbar state manually */\n update,\n /** @description scrolls to a particular set of coordinates */\n scrollTo,\n /** @description set distance to scroll top */\n setScrollTop,\n /** @description set distance to scroll left */\n setScrollLeft,\n /** @description handle scroll event */\n handleScroll,\n})\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbar2.js","names":[],"sources":["../../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<template>\n <div ref=\"scrollbarRef\" :class=\"ns.b()\">\n <div\n ref=\"wrapRef\"\n :class=\"wrapKls\"\n :style=\"wrapStyle\"\n :tabindex=\"tabindex\"\n @scroll=\"handleScroll\"\n @transitionend=\"updateBar\"\n @animationend=\"updateBar\"\n >\n <component\n :is=\"tag\"\n :id=\"id\"\n ref=\"resizeRef\"\n :class=\"resizeKls\"\n :style=\"viewStyle\"\n :role=\"role\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"ariaOrientation\"\n >\n <slot />\n </component>\n </div>\n <template v-if=\"!native\">\n <bar ref=\"barRef\" :always=\"always\" :min-size=\"minSize\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onActivated,\n onMounted,\n onUpdated,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport { useEventListener, useResizeObserver } from '@vueuse/core'\nimport {\n addUnit,\n debugWarn,\n isGreaterThan,\n isNumber,\n isObject,\n} from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport Bar from './bar.vue'\nimport { scrollbarContextKey } from './constants'\nimport { scrollbarEmits } from './scrollbar'\n\nimport type { ScrollbarDirection, ScrollbarProps } from './scrollbar'\nimport type { BarInstance } from './bar'\nimport type { CSSProperties, StyleValue } from 'vue'\n\nconst COMPONENT_NAME = 'ElScrollbar'\n\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = withDefaults(defineProps<ScrollbarProps>(), {\n distance: 0,\n height: '',\n maxHeight: '',\n wrapStyle: '',\n wrapClass: '',\n viewStyle: '',\n viewClass: '',\n tag: 'div',\n minSize: 20,\n tabindex: undefined,\n})\nconst emit = defineEmits(scrollbarEmits)\n\nconst ns = useNamespace('scrollbar')\n\nlet stopResizeObserver: (() => void) | undefined = undefined\nlet stopWrapResizeObserver: (() => void) | undefined = undefined\nlet stopResizeListener: (() => void) | undefined = undefined\nlet rafId = 0\nlet wrapScrollTop = 0\nlet wrapScrollLeft = 0\nlet direction = '' as ScrollbarDirection\nconst distanceScrollState = {\n bottom: false,\n top: false,\n right: false,\n left: false,\n}\n\nconst scrollbarRef = ref<HTMLDivElement>()\nconst wrapRef = ref<HTMLDivElement>()\nconst resizeRef = ref<HTMLElement>()\nconst barRef = ref<BarInstance>()\n\nconst wrapStyle = computed<StyleValue>(() => {\n const style: CSSProperties = {}\n const height = addUnit(props.height)\n const maxHeight = addUnit(props.maxHeight)\n if (height) style.height = height\n if (maxHeight) style.maxHeight = maxHeight\n return [props.wrapStyle, style]\n})\n\nconst wrapKls = computed(() => {\n return [\n props.wrapClass,\n ns.e('wrap'),\n { [ns.em('wrap', 'hidden-default')]: !props.native },\n ]\n})\n\nconst resizeKls = computed(() => {\n return [ns.e('view'), props.viewClass]\n})\n\nconst shouldSkipDirection = (direction: ScrollbarDirection) => {\n return distanceScrollState[direction] ?? false\n}\n\nconst DIRECTION_PAIRS: Record<ScrollbarDirection, ScrollbarDirection> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\nconst updateTriggerStatus = (arrivedStates: Record<string, boolean>) => {\n const oppositeDirection = DIRECTION_PAIRS[direction]\n if (!oppositeDirection) return\n\n const arrived = arrivedStates[direction]\n const oppositeArrived = arrivedStates[oppositeDirection]\n\n if (arrived && !distanceScrollState[direction]) {\n distanceScrollState[direction] = true\n }\n\n if (!oppositeArrived && distanceScrollState[oppositeDirection]) {\n distanceScrollState[oppositeDirection] = false\n }\n}\n\nconst handleScroll = () => {\n if (wrapRef.value) {\n barRef.value?.handleScroll(wrapRef.value)\n const prevTop = wrapScrollTop\n const prevLeft = wrapScrollLeft\n wrapScrollTop = wrapRef.value.scrollTop\n wrapScrollLeft = wrapRef.value.scrollLeft\n\n const arrivedStates = {\n bottom: !isGreaterThan(\n wrapRef.value.scrollHeight - props.distance,\n wrapRef.value.clientHeight + wrapScrollTop\n ),\n top: wrapScrollTop <= props.distance && prevTop !== 0,\n right:\n !isGreaterThan(\n wrapRef.value.scrollWidth - props.distance,\n wrapRef.value.clientWidth + wrapScrollLeft\n ) && prevLeft !== wrapScrollLeft,\n left: wrapScrollLeft <= props.distance && prevLeft !== 0,\n }\n\n emit('scroll', {\n scrollTop: wrapScrollTop,\n scrollLeft: wrapScrollLeft,\n })\n\n if (prevTop !== wrapScrollTop) {\n direction = wrapScrollTop > prevTop ? 'bottom' : 'top'\n }\n if (prevLeft !== wrapScrollLeft) {\n direction = wrapScrollLeft > prevLeft ? 'right' : 'left'\n }\n if (props.distance > 0) {\n if (shouldSkipDirection(direction)) {\n return\n }\n updateTriggerStatus(arrivedStates)\n }\n if (arrivedStates[direction]) emit('end-reached', direction)\n }\n}\n\nfunction scrollTo(xCord: number, yCord?: number): void\nfunction scrollTo(options: ScrollToOptions): void\nfunction scrollTo(arg1: unknown, arg2?: number) {\n if (isObject(arg1)) {\n wrapRef.value!.scrollTo(arg1)\n } else if (isNumber(arg1) && isNumber(arg2)) {\n wrapRef.value!.scrollTo(arg1, arg2)\n }\n}\n\nconst setScrollTop = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollTop = value\n}\n\nconst setScrollLeft = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollLeft = value\n}\n\nconst update = () => {\n barRef.value?.update()\n distanceScrollState[direction] = false\n if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value)\n}\n\n// Transform-driven overflow (e.g. slide transitions) is not observable via\n// resize observers, so refresh the bar when transitions/animations end —\n// this applies even when `noresize` is set.\nconst updateBar = () => {\n if (rafId) return\n rafId = requestAnimationFrame(() => {\n rafId = 0\n if (!wrapRef.value) return\n\n // Bar state may be stale even when the final scroll dimensions match a\n // previously seen value (e.g. `onUpdated` measured the transient\n // overflow mid-transition), so always refresh the bar here.\n barRef.value?.update()\n barRef.value?.handleScroll(wrapRef.value)\n })\n}\n\nwatch(\n () => props.noresize,\n (noresize) => {\n if (noresize) {\n stopResizeObserver?.()\n stopWrapResizeObserver?.()\n stopResizeListener?.()\n } else {\n ;({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update))\n ;({ stop: stopWrapResizeObserver } = useResizeObserver(wrapRef, update))\n stopResizeListener = useEventListener('resize', update)\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => [props.maxHeight, props.height],\n () => {\n if (!props.native)\n nextTick(() => {\n update()\n })\n }\n)\n\nprovide(\n scrollbarContextKey,\n reactive({\n scrollbarElement: scrollbarRef,\n wrapElement: wrapRef,\n })\n)\n\nonActivated(() => {\n if (wrapRef.value) {\n wrapRef.value.scrollTop = wrapScrollTop\n wrapRef.value.scrollLeft = wrapScrollLeft\n }\n})\n\nonMounted(() => {\n if (!props.native)\n nextTick(() => {\n update()\n })\n})\nonUpdated(() => update())\n\ndefineExpose({\n /** @description scrollbar wrap ref */\n wrapRef,\n /** @description update scrollbar state manually */\n update,\n /** @description scrolls to a particular set of coordinates */\n scrollTo,\n /** @description set distance to scroll top */\n setScrollTop,\n /** @description set distance to scroll left */\n setScrollLeft,\n /** @description handle scroll event */\n handleScroll,\n})\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"scrollbar2.js","names":[],"sources":["../../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<template>\n <div ref=\"scrollbarRef\" :class=\"ns.b()\">\n <div\n ref=\"wrapRef\"\n :class=\"wrapKls\"\n :style=\"wrapStyle\"\n :tabindex=\"tabindex\"\n @scroll=\"handleScroll\"\n @transitionend=\"updateBar\"\n @animationend=\"updateBar\"\n >\n <component\n :is=\"tag\"\n :id=\"id\"\n ref=\"resizeRef\"\n :class=\"resizeKls\"\n :style=\"viewStyle\"\n :role=\"role\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"ariaOrientation\"\n >\n <slot />\n </component>\n </div>\n <transition :name=\"ns.b('mask-fade')\">\n <scrollbar-mask v-if=\"mask\" ref=\"maskRef\" :mask=\"mask\" />\n </transition>\n <template v-if=\"!native\">\n <bar ref=\"barRef\" :always=\"always\" :min-size=\"minSize\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onActivated,\n onMounted,\n onUpdated,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport { useEventListener, useResizeObserver } from '@vueuse/core'\nimport {\n addUnit,\n debugWarn,\n isGreaterThan,\n isNumber,\n isObject,\n} from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport Bar from './bar.vue'\nimport ScrollbarMask from './mask.vue'\nimport { scrollbarContextKey } from './constants'\nimport { scrollbarEmits } from './scrollbar'\n\nimport type { ScrollbarDirection, ScrollbarProps } from './scrollbar'\nimport type { BarInstance } from './bar'\nimport type { CSSProperties, StyleValue } from 'vue'\n\nconst COMPONENT_NAME = 'ElScrollbar'\n\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = withDefaults(defineProps<ScrollbarProps>(), {\n distance: 0,\n height: '',\n maxHeight: '',\n wrapStyle: '',\n wrapClass: '',\n viewStyle: '',\n viewClass: '',\n tag: 'div',\n mask: false,\n minSize: 20,\n tabindex: undefined,\n})\nconst emit = defineEmits(scrollbarEmits)\n\nconst ns = useNamespace('scrollbar')\n\nlet stopResizeObserver: (() => void) | undefined = undefined\nlet stopWrapResizeObserver: (() => void) | undefined = undefined\nlet stopResizeListener: (() => void) | undefined = undefined\nlet rafId = 0\nlet wrapScrollTop = 0\nlet wrapScrollLeft = 0\nlet direction = '' as ScrollbarDirection\nconst distanceScrollState = {\n bottom: false,\n top: false,\n right: false,\n left: false,\n}\n\nconst scrollbarRef = ref<HTMLDivElement>()\nconst wrapRef = ref<HTMLDivElement>()\nconst resizeRef = ref<HTMLElement>()\nconst barRef = ref<BarInstance>()\nconst maskRef = ref<InstanceType<typeof ScrollbarMask>>()\n\nconst wrapStyle = computed<StyleValue>(() => {\n const style: CSSProperties = {}\n const height = addUnit(props.height)\n const maxHeight = addUnit(props.maxHeight)\n if (height) style.height = height\n if (maxHeight) style.maxHeight = maxHeight\n return [props.wrapStyle, style]\n})\n\nconst wrapKls = computed(() => {\n return [\n props.wrapClass,\n ns.e('wrap'),\n { [ns.em('wrap', 'hidden-default')]: !props.native },\n ]\n})\n\nconst resizeKls = computed(() => {\n return [ns.e('view'), props.viewClass]\n})\n\nconst shouldSkipDirection = (direction: ScrollbarDirection) => {\n return distanceScrollState[direction] ?? false\n}\n\nconst DIRECTION_PAIRS: Record<ScrollbarDirection, ScrollbarDirection> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\nconst updateTriggerStatus = (arrivedStates: Record<string, boolean>) => {\n const oppositeDirection = DIRECTION_PAIRS[direction]\n if (!oppositeDirection) return\n\n const arrived = arrivedStates[direction]\n const oppositeArrived = arrivedStates[oppositeDirection]\n\n if (arrived && !distanceScrollState[direction]) {\n distanceScrollState[direction] = true\n }\n\n if (!oppositeArrived && distanceScrollState[oppositeDirection]) {\n distanceScrollState[oppositeDirection] = false\n }\n}\n\nconst handleScroll = () => {\n if (wrapRef.value) {\n barRef.value?.handleScroll(wrapRef.value)\n maskRef.value?.handleScroll()\n const prevTop = wrapScrollTop\n const prevLeft = wrapScrollLeft\n wrapScrollTop = wrapRef.value.scrollTop\n wrapScrollLeft = wrapRef.value.scrollLeft\n\n const arrivedStates = {\n bottom: !isGreaterThan(\n wrapRef.value.scrollHeight - props.distance,\n wrapRef.value.clientHeight + wrapScrollTop\n ),\n top: wrapScrollTop <= props.distance && prevTop !== 0,\n right:\n !isGreaterThan(\n wrapRef.value.scrollWidth - props.distance,\n wrapRef.value.clientWidth + wrapScrollLeft\n ) && prevLeft !== wrapScrollLeft,\n left: wrapScrollLeft <= props.distance && prevLeft !== 0,\n }\n\n emit('scroll', {\n scrollTop: wrapScrollTop,\n scrollLeft: wrapScrollLeft,\n })\n\n if (prevTop !== wrapScrollTop) {\n direction = wrapScrollTop > prevTop ? 'bottom' : 'top'\n }\n if (prevLeft !== wrapScrollLeft) {\n direction = wrapScrollLeft > prevLeft ? 'right' : 'left'\n }\n if (props.distance > 0) {\n if (shouldSkipDirection(direction)) {\n return\n }\n updateTriggerStatus(arrivedStates)\n }\n if (arrivedStates[direction]) emit('end-reached', direction)\n }\n}\n\nfunction scrollTo(xCord: number, yCord?: number): void\nfunction scrollTo(options: ScrollToOptions): void\nfunction scrollTo(arg1: unknown, arg2?: number) {\n if (isObject(arg1)) {\n wrapRef.value!.scrollTo(arg1)\n } else if (isNumber(arg1) && isNumber(arg2)) {\n wrapRef.value!.scrollTo(arg1, arg2)\n }\n}\n\nconst setScrollTop = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollTop = value\n}\n\nconst setScrollLeft = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollLeft = value\n}\n\nconst update = () => {\n barRef.value?.update()\n maskRef.value?.update()\n distanceScrollState[direction] = false\n if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value)\n}\n\n// Transform-driven overflow (e.g. slide transitions) is not observable via\n// resize observers, so refresh the bar when transitions/animations end —\n// this applies even when `noresize` is set.\nconst updateBar = () => {\n if (rafId) return\n rafId = requestAnimationFrame(() => {\n rafId = 0\n if (!wrapRef.value) return\n\n // Bar state may be stale even when the final scroll dimensions match a\n // previously seen value (e.g. `onUpdated` measured the transient\n // overflow mid-transition), so always refresh the bar here.\n barRef.value?.update()\n barRef.value?.handleScroll(wrapRef.value)\n maskRef.value?.update()\n })\n}\n\nwatch(\n () => props.noresize,\n (noresize) => {\n if (noresize) {\n stopResizeObserver?.()\n stopWrapResizeObserver?.()\n stopResizeListener?.()\n } else {\n ;({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update))\n ;({ stop: stopWrapResizeObserver } = useResizeObserver(wrapRef, update))\n stopResizeListener = useEventListener('resize', update)\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => [props.maxHeight, props.height],\n () => {\n if (!props.native || props.mask)\n nextTick(() => {\n update()\n })\n }\n)\n\nprovide(\n scrollbarContextKey,\n reactive({\n scrollbarElement: scrollbarRef,\n wrapElement: wrapRef,\n })\n)\n\nonActivated(() => {\n if (wrapRef.value) {\n wrapRef.value.scrollTop = wrapScrollTop\n wrapRef.value.scrollLeft = wrapScrollLeft\n maskRef.value?.update()\n }\n})\n\nonMounted(() => {\n if (!props.native || props.mask)\n nextTick(() => {\n update()\n })\n})\nonUpdated(() => update())\n\ndefineExpose({\n /** @description scrollbar wrap ref */\n wrapRef,\n /** @description update scrollbar state manually */\n update,\n /** @description scrolls to a particular set of coordinates */\n scrollTo,\n /** @description set distance to scroll top */\n setScrollTop,\n /** @description set distance to scroll left */\n setScrollLeft,\n /** @description handle scroll event */\n handleScroll,\n})\n</script>\n"],"mappings":""}
@@ -11,7 +11,7 @@ declare const ElSegmented: (<T extends Option = Option>(__VLS_props: NonNullable
11
11
  }) => any;
12
12
  };
13
13
  attrs: any;
14
- emit: ((event: "update:modelValue", val: any) => void) & ((event: "change", val: any) => void);
14
+ emit: ((event: "change", val: any) => void) & ((event: "update:modelValue", val: any) => void);
15
15
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
16
16
  props: _$vue.PublicProps & {
17
17
  direction?: "vertical" | "horizontal" | undefined;
@@ -25,8 +25,8 @@ declare const ElSegmented: (<T extends Option = Option>(__VLS_props: NonNullable
25
25
  id?: string | undefined;
26
26
  name?: string | undefined;
27
27
  ariaLabel?: string | undefined;
28
- "onUpdate:modelValue"?: ((val: any) => any) | undefined;
29
28
  onChange?: ((val: any) => any) | undefined;
29
+ "onUpdate:modelValue"?: ((val: any) => any) | undefined;
30
30
  } & (typeof globalThis extends {
31
31
  __VLS_PROPS_FALLBACK: infer P;
32
32
  } ? P : {});
@@ -37,7 +37,7 @@ declare const ElSegmented: (<T extends Option = Option>(__VLS_props: NonNullable
37
37
  item: T;
38
38
  }) => any;
39
39
  };
40
- emit: ((event: "update:modelValue", val: any) => void) & ((event: "change", val: any) => void);
40
+ emit: ((event: "change", val: any) => void) & ((event: "update:modelValue", val: any) => void);
41
41
  }>) => _$vue.VNode & {
42
42
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
43
43
  }) & _$vue.ObjectPlugin & {
@@ -5,8 +5,8 @@ import * as _$vue from "vue";
5
5
  //#region ../../packages/components/segmented/src/segmented.vue.d.ts
6
6
  declare const __VLS_export: <T extends Option = Option>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
7
7
  props: _$vue.PublicProps & __VLS_PrettifyLocal<SegmentedProps<T> & {
8
- "onUpdate:modelValue"?: ((val: any) => any) | undefined;
9
8
  onChange?: ((val: any) => any) | undefined;
9
+ "onUpdate:modelValue"?: ((val: any) => any) | undefined;
10
10
  }> & (typeof globalThis extends {
11
11
  __VLS_PROPS_FALLBACK: infer P;
12
12
  } ? P : {});
@@ -17,7 +17,7 @@ declare const __VLS_export: <T extends Option = Option>(__VLS_props: NonNullable
17
17
  item: T;
18
18
  }) => any;
19
19
  };
20
- emit: ((event: "update:modelValue", val: any) => void) & ((event: "change", val: any) => void);
20
+ emit: ((event: "change", val: any) => void) & ((event: "update:modelValue", val: any) => void);
21
21
  }>) => _$vue.VNode & {
22
22
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
23
23
  };