@element-plus/nightly 0.0.20220105 → 0.0.20220109

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 (380) hide show
  1. package/README.md +27 -82
  2. package/attributes.json +1 -1
  3. package/dist/index.css +1 -1
  4. package/dist/index.full.js +288 -219
  5. package/dist/index.full.min.js +8 -8
  6. package/dist/index.full.min.js.map +1 -1
  7. package/dist/index.full.min.mjs +8 -8
  8. package/dist/index.full.min.mjs.map +1 -1
  9. package/dist/index.full.mjs +286 -216
  10. package/es/components/autocomplete/src/index.vue_vue_type_script_lang.mjs.map +1 -1
  11. package/es/components/autocomplete/src/index.vue_vue_type_template_id_2f09f285_lang.mjs +1 -0
  12. package/es/components/autocomplete/src/index.vue_vue_type_template_id_2f09f285_lang.mjs.map +1 -1
  13. package/es/components/cascader/index.d.ts +4 -0
  14. package/es/components/cascader/src/index.vue.d.ts +2 -0
  15. package/es/components/cascader-panel/src/index.vue_vue_type_script_lang.mjs +5 -4
  16. package/es/components/cascader-panel/src/index.vue_vue_type_script_lang.mjs.map +1 -1
  17. package/es/components/cascader-panel/src/index.vue_vue_type_template_id_97c48f5c_lang.mjs.map +1 -1
  18. package/es/components/cascader-panel/src/menu.vue.d.ts +1 -0
  19. package/es/components/cascader-panel/src/menu.vue_vue_type_script_lang.mjs +6 -0
  20. package/es/components/cascader-panel/src/menu.vue_vue_type_script_lang.mjs.map +1 -1
  21. package/es/components/cascader-panel/src/menu.vue_vue_type_template_id_9c79e4e2_lang.mjs +19 -2
  22. package/es/components/cascader-panel/src/menu.vue_vue_type_template_id_9c79e4e2_lang.mjs.map +1 -1
  23. package/es/components/cascader-panel/src/types.d.ts +1 -0
  24. package/es/components/cascader-panel/src/types.mjs.map +1 -1
  25. package/es/components/checkbox/index.d.ts +6 -6
  26. package/es/components/checkbox/src/checkbox-button.vue.d.ts +2 -2
  27. package/es/components/checkbox/src/checkbox.vue.d.ts +2 -2
  28. package/es/components/color-picker/src/index.vue_vue_type_script_lang.mjs.map +1 -1
  29. package/es/components/color-picker/src/index.vue_vue_type_template_id_46a474d5_lang.mjs +2 -1
  30. package/es/components/color-picker/src/index.vue_vue_type_template_id_46a474d5_lang.mjs.map +1 -1
  31. package/es/components/config-provider/index.d.ts +6 -2
  32. package/es/components/config-provider/index.mjs +1 -1
  33. package/es/components/config-provider/src/config-provider.d.ts +13 -5
  34. package/es/components/config-provider/src/config-provider.mjs +12 -5
  35. package/es/components/config-provider/src/config-provider.mjs.map +1 -1
  36. package/es/components/date-picker/index.d.ts +4 -4
  37. package/es/components/date-picker/src/date-picker-com/basic-cell-render.mjs +1 -1
  38. package/es/components/date-picker/src/date-picker-com/basic-cell-render.mjs.map +1 -1
  39. package/es/components/date-picker/src/date-picker.d.ts +2 -2
  40. package/es/components/dropdown/src/dropdown.vue_vue_type_script_lang.mjs.map +1 -1
  41. package/es/components/dropdown/src/dropdown.vue_vue_type_template_id_3ed790a5_lang.mjs +1 -0
  42. package/es/components/dropdown/src/dropdown.vue_vue_type_template_id_3ed790a5_lang.mjs.map +1 -1
  43. package/es/components/form/index.d.ts +1 -0
  44. package/es/components/form/src/form.vue.d.ts +1 -0
  45. package/es/components/form/src/form.vue_vue_type_script_lang.mjs +14 -0
  46. package/es/components/form/src/form.vue_vue_type_script_lang.mjs.map +1 -1
  47. package/es/components/form/src/form.vue_vue_type_template_id_602d6cf6_lang.mjs +1 -4
  48. package/es/components/form/src/form.vue_vue_type_template_id_602d6cf6_lang.mjs.map +1 -1
  49. package/es/components/index.mjs +3 -3
  50. package/es/components/input/index.d.ts +1 -0
  51. package/es/components/input/src/input.vue.d.ts +1 -0
  52. package/es/components/input/src/input.vue_vue_type_script_lang.mjs +1 -0
  53. package/es/components/input/src/input.vue_vue_type_script_lang.mjs.map +1 -1
  54. package/es/components/input/src/input.vue_vue_type_template_id_3290dcb6_lang.mjs +1 -1
  55. package/es/components/input/src/input.vue_vue_type_template_id_3290dcb6_lang.mjs.map +1 -1
  56. package/es/components/input-number/index.d.ts +5 -1
  57. package/es/components/input-number/src/input-number.vue.d.ts +5 -1
  58. package/es/components/input-number/src/input-number.vue_vue_type_script_lang.mjs +15 -1
  59. package/es/components/input-number/src/input-number.vue_vue_type_script_lang.mjs.map +1 -1
  60. package/es/components/input-number/src/input-number.vue_vue_type_template_id_dec60af6_lang.mjs +5 -4
  61. package/es/components/input-number/src/input-number.vue_vue_type_template_id_dec60af6_lang.mjs.map +1 -1
  62. package/es/components/menu/src/menu-item.vue_vue_type_script_lang.mjs.map +1 -1
  63. package/es/components/menu/src/menu-item.vue_vue_type_template_id_aa755baa_lang.mjs +2 -1
  64. package/es/components/menu/src/menu-item.vue_vue_type_template_id_aa755baa_lang.mjs.map +1 -1
  65. package/es/components/message/src/message-method.mjs +5 -1
  66. package/es/components/message/src/message-method.mjs.map +1 -1
  67. package/es/components/message/src/message.d.ts +3 -0
  68. package/es/components/message/src/message.mjs.map +1 -1
  69. package/es/components/message/src/message.vue.d.ts +2 -2
  70. package/es/components/message-box/src/index.vue_vue_type_script_lang.mjs.map +1 -1
  71. package/es/components/message-box/src/index.vue_vue_type_template_id_7035e868_lang.mjs +1 -0
  72. package/es/components/message-box/src/index.vue_vue_type_template_id_7035e868_lang.mjs.map +1 -1
  73. package/es/components/notification/src/notification.vue.d.ts +4 -4
  74. package/es/components/popconfirm/src/popconfirm.vue_vue_type_script_lang.mjs.map +1 -1
  75. package/es/components/popconfirm/src/popconfirm.vue_vue_type_template_id_16409d25_lang.mjs +2 -1
  76. package/es/components/popconfirm/src/popconfirm.vue_vue_type_template_id_16409d25_lang.mjs.map +1 -1
  77. package/es/components/popover/src/index.vue_vue_type_script_lang.mjs.map +1 -1
  78. package/es/components/popover/src/index.vue_vue_type_template_id_15486cf0_lang.mjs +2 -1
  79. package/es/components/popover/src/index.vue_vue_type_template_id_15486cf0_lang.mjs.map +1 -1
  80. package/es/components/popper/src/content.vue_vue_type_script_lang.mjs.map +1 -1
  81. package/es/components/popper/src/content.vue_vue_type_template_id_611b76f0_lang.mjs +1 -0
  82. package/es/components/popper/src/content.vue_vue_type_template_id_611b76f0_lang.mjs.map +1 -1
  83. package/es/components/radio/index.d.ts +6 -6
  84. package/es/components/radio/index.mjs +2 -2
  85. package/es/components/radio/src/radio-button.mjs +11 -5
  86. package/es/components/radio/src/radio-button.mjs.map +1 -1
  87. package/es/components/radio/src/radio-button.vue.d.ts +2 -2
  88. package/es/components/radio/src/radio-button.vue_vue_type_script_lang.mjs +1 -1
  89. package/es/components/radio/src/radio-button2.mjs +5 -11
  90. package/es/components/radio/src/radio-button2.mjs.map +1 -1
  91. package/es/components/radio/src/radio.vue.d.ts +2 -2
  92. package/es/components/rate/index.d.ts +7 -1
  93. package/es/components/rate/src/rate.d.ts +2 -0
  94. package/es/components/rate/src/rate.mjs +5 -0
  95. package/es/components/rate/src/rate.mjs.map +1 -1
  96. package/es/components/rate/src/rate.vue.d.ts +7 -1
  97. package/es/components/rate/src/rate.vue_vue_type_script_lang.mjs +6 -0
  98. package/es/components/rate/src/rate.vue_vue_type_script_lang.mjs.map +1 -1
  99. package/es/components/rate/src/rate.vue_vue_type_template_id_38c42df6_lang.mjs +3 -3
  100. package/es/components/rate/src/rate.vue_vue_type_template_id_38c42df6_lang.mjs.map +1 -1
  101. package/es/components/select/index.d.ts +1 -1
  102. package/es/components/select/src/select.vue.d.ts +1 -1
  103. package/es/components/select/src/select.vue_vue_type_script_lang.mjs.map +1 -1
  104. package/es/components/select/src/select.vue_vue_type_template_id_33774f85_lang.mjs +1 -0
  105. package/es/components/select/src/select.vue_vue_type_template_id_33774f85_lang.mjs.map +1 -1
  106. package/es/components/select-v2/index.d.ts +2 -2
  107. package/es/components/select-v2/src/select.vue.d.ts +1 -1
  108. package/es/components/select-v2/src/select.vue_vue_type_script_lang.mjs.map +1 -1
  109. package/es/components/select-v2/src/select.vue_vue_type_template_id_13e598a4_lang.mjs +1 -0
  110. package/es/components/select-v2/src/select.vue_vue_type_template_id_13e598a4_lang.mjs.map +1 -1
  111. package/es/components/skeleton/index.mjs +2 -2
  112. package/es/components/skeleton/src/skeleton.mjs +24 -5
  113. package/es/components/skeleton/src/skeleton.mjs.map +1 -1
  114. package/es/components/skeleton/src/skeleton.vue_vue_type_script_lang.mjs +1 -1
  115. package/es/components/skeleton/src/skeleton2.mjs +5 -24
  116. package/es/components/skeleton/src/skeleton2.mjs.map +1 -1
  117. package/es/components/slider/index.d.ts +22 -6
  118. package/es/components/slider/src/button.vue_vue_type_script_lang.mjs.map +1 -1
  119. package/es/components/slider/src/button.vue_vue_type_template_id_9cd3e794_lang.mjs +2 -1
  120. package/es/components/slider/src/button.vue_vue_type_template_id_9cd3e794_lang.mjs.map +1 -1
  121. package/es/components/slider/src/index.vue.d.ts +11 -3
  122. package/es/components/slider/src/index.vue_vue_type_script_lang.mjs +21 -2
  123. package/es/components/slider/src/index.vue_vue_type_script_lang.mjs.map +1 -1
  124. package/es/components/slider/src/index.vue_vue_type_template_id_24c42d04_lang.mjs +19 -19
  125. package/es/components/slider/src/index.vue_vue_type_template_id_24c42d04_lang.mjs.map +1 -1
  126. package/es/components/switch/index.d.ts +7 -2
  127. package/es/components/switch/src/switch.d.ts +2 -0
  128. package/es/components/switch/src/switch.mjs +5 -0
  129. package/es/components/switch/src/switch.mjs.map +1 -1
  130. package/es/components/switch/src/switch.vue.d.ts +7 -2
  131. package/es/components/switch/src/switch.vue_vue_type_script_lang.mjs +10 -1
  132. package/es/components/switch/src/switch.vue_vue_type_script_lang.mjs.map +1 -1
  133. package/es/components/switch/src/switch.vue_vue_type_template_id_538fbc85_lang.mjs +1 -1
  134. package/es/components/switch/src/switch.vue_vue_type_template_id_538fbc85_lang.mjs.map +1 -1
  135. package/es/components/table/src/filter-panel.vue_vue_type_script_lang.mjs.map +1 -1
  136. package/es/components/table/src/filter-panel.vue_vue_type_template_id_fde1c940_lang.mjs +2 -1
  137. package/es/components/table/src/filter-panel.vue_vue_type_template_id_fde1c940_lang.mjs.map +1 -1
  138. package/es/components/table/src/table-layout.mjs +1 -2
  139. package/es/components/table/src/table-layout.mjs.map +1 -1
  140. package/es/components/table/src/util.d.ts +2 -2
  141. package/es/components/table/src/util.mjs +9 -5
  142. package/es/components/table/src/util.mjs.map +1 -1
  143. package/es/components/tabs/index.d.ts +4 -4
  144. package/es/components/tabs/src/tab-pane.vue.d.ts +2 -2
  145. package/es/components/time-picker/index.d.ts +4 -4
  146. package/es/components/time-picker/src/common/picker.vue.d.ts +2 -2
  147. package/es/components/time-picker/src/common/picker.vue_vue_type_script_lang.mjs +6 -2
  148. package/es/components/time-picker/src/common/picker.vue_vue_type_script_lang.mjs.map +1 -1
  149. package/es/components/time-picker/src/common/picker.vue_vue_type_template_id_1d54be91_lang.mjs +1 -0
  150. package/es/components/time-picker/src/common/picker.vue_vue_type_template_id_1d54be91_lang.mjs.map +1 -1
  151. package/es/components/time-picker/src/time-picker.d.ts +2 -2
  152. package/es/components/transfer/src/transfer-panel.vue.d.ts +1 -2
  153. package/es/components/transfer/src/transfer-panel.vue_vue_type_script_lang.mjs +2 -13
  154. package/es/components/transfer/src/transfer-panel.vue_vue_type_script_lang.mjs.map +1 -1
  155. package/es/components/transfer/src/transfer-panel.vue_vue_type_template_id_1a7d1f9c_lang.mjs +5 -18
  156. package/es/components/transfer/src/transfer-panel.vue_vue_type_template_id_1a7d1f9c_lang.mjs.map +1 -1
  157. package/es/defaults.d.ts +3 -1
  158. package/es/hooks/index.mjs +1 -1
  159. package/es/hooks/use-global-config/index.d.ts +3 -1
  160. package/es/hooks/use-global-config/index.mjs +3 -2
  161. package/es/hooks/use-global-config/index.mjs.map +1 -1
  162. package/es/hooks/use-id/index.mjs +2 -2
  163. package/es/hooks/use-id/index.mjs.map +1 -1
  164. package/es/hooks/use-locale/index.d.ts +2 -253
  165. package/es/hooks/use-locale/index.mjs +9 -29
  166. package/es/hooks/use-locale/index.mjs.map +1 -1
  167. package/es/hooks/use-popper-container/index.mjs +2 -2
  168. package/es/hooks/use-popper-container/index.mjs.map +1 -1
  169. package/es/index.d.ts +4 -1
  170. package/es/index.mjs +5 -4
  171. package/es/index.mjs.map +1 -1
  172. package/es/version.d.ts +1 -1
  173. package/es/version.mjs +1 -1
  174. package/es/version.mjs.map +1 -1
  175. package/lib/components/autocomplete/src/index.vue_vue_type_script_lang.js.map +1 -1
  176. package/lib/components/autocomplete/src/index.vue_vue_type_template_id_2f09f285_lang.js +1 -0
  177. package/lib/components/autocomplete/src/index.vue_vue_type_template_id_2f09f285_lang.js.map +1 -1
  178. package/lib/components/cascader/index.d.ts +4 -0
  179. package/lib/components/cascader/src/index.vue.d.ts +2 -0
  180. package/lib/components/cascader-panel/src/index.vue_vue_type_script_lang.js +5 -4
  181. package/lib/components/cascader-panel/src/index.vue_vue_type_script_lang.js.map +1 -1
  182. package/lib/components/cascader-panel/src/index.vue_vue_type_template_id_97c48f5c_lang.js.map +1 -1
  183. package/lib/components/cascader-panel/src/menu.vue.d.ts +1 -0
  184. package/lib/components/cascader-panel/src/menu.vue_vue_type_script_lang.js +10 -4
  185. package/lib/components/cascader-panel/src/menu.vue_vue_type_script_lang.js.map +1 -1
  186. package/lib/components/cascader-panel/src/menu.vue_vue_type_template_id_9c79e4e2_lang.js +18 -1
  187. package/lib/components/cascader-panel/src/menu.vue_vue_type_template_id_9c79e4e2_lang.js.map +1 -1
  188. package/lib/components/cascader-panel/src/types.d.ts +1 -0
  189. package/lib/components/cascader-panel/src/types.js.map +1 -1
  190. package/lib/components/checkbox/index.d.ts +6 -6
  191. package/lib/components/checkbox/src/checkbox-button.vue.d.ts +2 -2
  192. package/lib/components/checkbox/src/checkbox.vue.d.ts +2 -2
  193. package/lib/components/color-picker/src/index.vue_vue_type_script_lang.js.map +1 -1
  194. package/lib/components/color-picker/src/index.vue_vue_type_template_id_46a474d5_lang.js +2 -1
  195. package/lib/components/color-picker/src/index.vue_vue_type_template_id_46a474d5_lang.js.map +1 -1
  196. package/lib/components/config-provider/index.d.ts +6 -2
  197. package/lib/components/config-provider/index.js +1 -0
  198. package/lib/components/config-provider/index.js.map +1 -1
  199. package/lib/components/config-provider/src/config-provider.d.ts +13 -5
  200. package/lib/components/config-provider/src/config-provider.js +13 -5
  201. package/lib/components/config-provider/src/config-provider.js.map +1 -1
  202. package/lib/components/date-picker/index.d.ts +4 -4
  203. package/lib/components/date-picker/src/date-picker-com/basic-cell-render.js +1 -1
  204. package/lib/components/date-picker/src/date-picker-com/basic-cell-render.js.map +1 -1
  205. package/lib/components/date-picker/src/date-picker.d.ts +2 -2
  206. package/lib/components/dropdown/src/dropdown.vue_vue_type_script_lang.js.map +1 -1
  207. package/lib/components/dropdown/src/dropdown.vue_vue_type_template_id_3ed790a5_lang.js +1 -0
  208. package/lib/components/dropdown/src/dropdown.vue_vue_type_template_id_3ed790a5_lang.js.map +1 -1
  209. package/lib/components/form/index.d.ts +1 -0
  210. package/lib/components/form/src/form.vue.d.ts +1 -0
  211. package/lib/components/form/src/form.vue_vue_type_script_lang.js +14 -0
  212. package/lib/components/form/src/form.vue_vue_type_script_lang.js.map +1 -1
  213. package/lib/components/form/src/form.vue_vue_type_template_id_602d6cf6_lang.js +1 -4
  214. package/lib/components/form/src/form.vue_vue_type_template_id_602d6cf6_lang.js.map +1 -1
  215. package/lib/components/index.js +3 -2
  216. package/lib/components/index.js.map +1 -1
  217. package/lib/components/input/index.d.ts +1 -0
  218. package/lib/components/input/src/input.vue.d.ts +1 -0
  219. package/lib/components/input/src/input.vue_vue_type_script_lang.js +1 -0
  220. package/lib/components/input/src/input.vue_vue_type_script_lang.js.map +1 -1
  221. package/lib/components/input/src/input.vue_vue_type_template_id_3290dcb6_lang.js +1 -1
  222. package/lib/components/input/src/input.vue_vue_type_template_id_3290dcb6_lang.js.map +1 -1
  223. package/lib/components/input-number/index.d.ts +5 -1
  224. package/lib/components/input-number/src/input-number.vue.d.ts +5 -1
  225. package/lib/components/input-number/src/input-number.vue_vue_type_script_lang.js +18 -4
  226. package/lib/components/input-number/src/input-number.vue_vue_type_script_lang.js.map +1 -1
  227. package/lib/components/input-number/src/input-number.vue_vue_type_template_id_dec60af6_lang.js +5 -4
  228. package/lib/components/input-number/src/input-number.vue_vue_type_template_id_dec60af6_lang.js.map +1 -1
  229. package/lib/components/menu/src/menu-item.vue_vue_type_script_lang.js.map +1 -1
  230. package/lib/components/menu/src/menu-item.vue_vue_type_template_id_aa755baa_lang.js +2 -1
  231. package/lib/components/menu/src/menu-item.vue_vue_type_template_id_aa755baa_lang.js.map +1 -1
  232. package/lib/components/message/src/message-method.js +5 -1
  233. package/lib/components/message/src/message-method.js.map +1 -1
  234. package/lib/components/message/src/message.d.ts +3 -0
  235. package/lib/components/message/src/message.js.map +1 -1
  236. package/lib/components/message/src/message.vue.d.ts +2 -2
  237. package/lib/components/message-box/src/index.vue_vue_type_script_lang.js.map +1 -1
  238. package/lib/components/message-box/src/index.vue_vue_type_template_id_7035e868_lang.js +1 -0
  239. package/lib/components/message-box/src/index.vue_vue_type_template_id_7035e868_lang.js.map +1 -1
  240. package/lib/components/notification/src/notification.vue.d.ts +4 -4
  241. package/lib/components/popconfirm/src/popconfirm.vue_vue_type_script_lang.js.map +1 -1
  242. package/lib/components/popconfirm/src/popconfirm.vue_vue_type_template_id_16409d25_lang.js +2 -1
  243. package/lib/components/popconfirm/src/popconfirm.vue_vue_type_template_id_16409d25_lang.js.map +1 -1
  244. package/lib/components/popover/src/index.vue_vue_type_script_lang.js.map +1 -1
  245. package/lib/components/popover/src/index.vue_vue_type_template_id_15486cf0_lang.js +2 -1
  246. package/lib/components/popover/src/index.vue_vue_type_template_id_15486cf0_lang.js.map +1 -1
  247. package/lib/components/popper/src/content.vue_vue_type_script_lang.js.map +1 -1
  248. package/lib/components/popper/src/content.vue_vue_type_template_id_611b76f0_lang.js +1 -0
  249. package/lib/components/popper/src/content.vue_vue_type_template_id_611b76f0_lang.js.map +1 -1
  250. package/lib/components/radio/index.d.ts +6 -6
  251. package/lib/components/radio/index.js +2 -2
  252. package/lib/components/radio/src/radio-button.js +10 -5
  253. package/lib/components/radio/src/radio-button.js.map +1 -1
  254. package/lib/components/radio/src/radio-button.vue.d.ts +2 -2
  255. package/lib/components/radio/src/radio-button.vue_vue_type_script_lang.js +1 -1
  256. package/lib/components/radio/src/radio-button2.js +5 -10
  257. package/lib/components/radio/src/radio-button2.js.map +1 -1
  258. package/lib/components/radio/src/radio.vue.d.ts +2 -2
  259. package/lib/components/rate/index.d.ts +7 -1
  260. package/lib/components/rate/src/rate.d.ts +2 -0
  261. package/lib/components/rate/src/rate.js +5 -0
  262. package/lib/components/rate/src/rate.js.map +1 -1
  263. package/lib/components/rate/src/rate.vue.d.ts +7 -1
  264. package/lib/components/rate/src/rate.vue_vue_type_script_lang.js +6 -0
  265. package/lib/components/rate/src/rate.vue_vue_type_script_lang.js.map +1 -1
  266. package/lib/components/rate/src/rate.vue_vue_type_template_id_38c42df6_lang.js +2 -2
  267. package/lib/components/rate/src/rate.vue_vue_type_template_id_38c42df6_lang.js.map +1 -1
  268. package/lib/components/select/index.d.ts +1 -1
  269. package/lib/components/select/src/select.vue.d.ts +1 -1
  270. package/lib/components/select/src/select.vue_vue_type_script_lang.js.map +1 -1
  271. package/lib/components/select/src/select.vue_vue_type_template_id_33774f85_lang.js +1 -0
  272. package/lib/components/select/src/select.vue_vue_type_template_id_33774f85_lang.js.map +1 -1
  273. package/lib/components/select-v2/index.d.ts +2 -2
  274. package/lib/components/select-v2/src/select.vue.d.ts +1 -1
  275. package/lib/components/select-v2/src/select.vue_vue_type_script_lang.js.map +1 -1
  276. package/lib/components/select-v2/src/select.vue_vue_type_template_id_13e598a4_lang.js +1 -0
  277. package/lib/components/select-v2/src/select.vue_vue_type_template_id_13e598a4_lang.js.map +1 -1
  278. package/lib/components/skeleton/index.js +2 -2
  279. package/lib/components/skeleton/src/skeleton.js +23 -5
  280. package/lib/components/skeleton/src/skeleton.js.map +1 -1
  281. package/lib/components/skeleton/src/skeleton.vue_vue_type_script_lang.js +1 -1
  282. package/lib/components/skeleton/src/skeleton2.js +5 -23
  283. package/lib/components/skeleton/src/skeleton2.js.map +1 -1
  284. package/lib/components/slider/index.d.ts +22 -6
  285. package/lib/components/slider/src/button.vue_vue_type_script_lang.js.map +1 -1
  286. package/lib/components/slider/src/button.vue_vue_type_template_id_9cd3e794_lang.js +2 -1
  287. package/lib/components/slider/src/button.vue_vue_type_template_id_9cd3e794_lang.js.map +1 -1
  288. package/lib/components/slider/src/index.vue.d.ts +11 -3
  289. package/lib/components/slider/src/index.vue_vue_type_script_lang.js +21 -2
  290. package/lib/components/slider/src/index.vue_vue_type_script_lang.js.map +1 -1
  291. package/lib/components/slider/src/index.vue_vue_type_template_id_24c42d04_lang.js +18 -18
  292. package/lib/components/slider/src/index.vue_vue_type_template_id_24c42d04_lang.js.map +1 -1
  293. package/lib/components/switch/index.d.ts +7 -2
  294. package/lib/components/switch/src/switch.d.ts +2 -0
  295. package/lib/components/switch/src/switch.js +5 -0
  296. package/lib/components/switch/src/switch.js.map +1 -1
  297. package/lib/components/switch/src/switch.vue.d.ts +7 -2
  298. package/lib/components/switch/src/switch.vue_vue_type_script_lang.js +9 -0
  299. package/lib/components/switch/src/switch.vue_vue_type_script_lang.js.map +1 -1
  300. package/lib/components/switch/src/switch.vue_vue_type_template_id_538fbc85_lang.js +1 -1
  301. package/lib/components/switch/src/switch.vue_vue_type_template_id_538fbc85_lang.js.map +1 -1
  302. package/lib/components/table/src/filter-panel.vue_vue_type_script_lang.js.map +1 -1
  303. package/lib/components/table/src/filter-panel.vue_vue_type_template_id_fde1c940_lang.js +2 -1
  304. package/lib/components/table/src/filter-panel.vue_vue_type_template_id_fde1c940_lang.js.map +1 -1
  305. package/lib/components/table/src/table-layout.js +1 -2
  306. package/lib/components/table/src/table-layout.js.map +1 -1
  307. package/lib/components/table/src/util.d.ts +2 -2
  308. package/lib/components/table/src/util.js +9 -5
  309. package/lib/components/table/src/util.js.map +1 -1
  310. package/lib/components/tabs/index.d.ts +4 -4
  311. package/lib/components/tabs/src/tab-pane.vue.d.ts +2 -2
  312. package/lib/components/time-picker/index.d.ts +4 -4
  313. package/lib/components/time-picker/src/common/picker.vue.d.ts +2 -2
  314. package/lib/components/time-picker/src/common/picker.vue_vue_type_script_lang.js +6 -2
  315. package/lib/components/time-picker/src/common/picker.vue_vue_type_script_lang.js.map +1 -1
  316. package/lib/components/time-picker/src/common/picker.vue_vue_type_template_id_1d54be91_lang.js +1 -0
  317. package/lib/components/time-picker/src/common/picker.vue_vue_type_template_id_1d54be91_lang.js.map +1 -1
  318. package/lib/components/time-picker/src/time-picker.d.ts +2 -2
  319. package/lib/components/transfer/src/transfer-panel.vue.d.ts +1 -2
  320. package/lib/components/transfer/src/transfer-panel.vue_vue_type_script_lang.js +3 -14
  321. package/lib/components/transfer/src/transfer-panel.vue_vue_type_script_lang.js.map +1 -1
  322. package/lib/components/transfer/src/transfer-panel.vue_vue_type_template_id_1a7d1f9c_lang.js +4 -17
  323. package/lib/components/transfer/src/transfer-panel.vue_vue_type_template_id_1a7d1f9c_lang.js.map +1 -1
  324. package/lib/defaults.d.ts +3 -1
  325. package/lib/hooks/index.js +1 -4
  326. package/lib/hooks/index.js.map +1 -1
  327. package/lib/hooks/use-global-config/index.d.ts +3 -1
  328. package/lib/hooks/use-global-config/index.js +3 -2
  329. package/lib/hooks/use-global-config/index.js.map +1 -1
  330. package/lib/hooks/use-id/index.js +2 -2
  331. package/lib/hooks/use-id/index.js.map +1 -1
  332. package/lib/hooks/use-locale/index.d.ts +2 -253
  333. package/lib/hooks/use-locale/index.js +8 -31
  334. package/lib/hooks/use-locale/index.js.map +1 -1
  335. package/lib/hooks/use-popper-container/index.js +2 -2
  336. package/lib/hooks/use-popper-container/index.js.map +1 -1
  337. package/lib/index.d.ts +4 -1
  338. package/lib/index.js +6 -6
  339. package/lib/index.js.map +1 -1
  340. package/lib/version.d.ts +1 -1
  341. package/lib/version.js +1 -1
  342. package/lib/version.js.map +1 -1
  343. package/package.json +2 -2
  344. package/tags.json +1 -1
  345. package/theme-chalk/el-cascader.css +1 -1
  346. package/theme-chalk/el-checkbox.css +1 -1
  347. package/theme-chalk/el-date-picker.css +1 -1
  348. package/theme-chalk/el-form.css +1 -1
  349. package/theme-chalk/el-pagination.css +1 -1
  350. package/theme-chalk/el-radio.css +1 -1
  351. package/theme-chalk/el-rate.css +1 -1
  352. package/theme-chalk/el-select-v2.css +1 -1
  353. package/theme-chalk/el-slider.css +1 -1
  354. package/theme-chalk/el-switch.css +1 -1
  355. package/theme-chalk/el-tag.css +1 -1
  356. package/theme-chalk/el-time-picker.css +1 -1
  357. package/theme-chalk/el-time-select.css +1 -1
  358. package/theme-chalk/el-transfer.css +1 -1
  359. package/theme-chalk/index.css +1 -1
  360. package/theme-chalk/src/cascader.scss +4 -0
  361. package/theme-chalk/src/checkbox.scss +40 -6
  362. package/theme-chalk/src/common/var.scss +2 -4
  363. package/theme-chalk/src/date-picker/picker-panel.scss +1 -1
  364. package/theme-chalk/src/date-picker/picker.scss +1 -0
  365. package/theme-chalk/src/form.scss +101 -24
  366. package/theme-chalk/src/pagination.scss +0 -3
  367. package/theme-chalk/src/radio.scss +21 -0
  368. package/theme-chalk/src/rate.scss +19 -2
  369. package/theme-chalk/src/select-v2.scss +2 -3
  370. package/theme-chalk/src/slider.scss +28 -77
  371. package/theme-chalk/src/switch.scss +43 -4
  372. package/theme-chalk/src/tag.scss +3 -3
  373. package/theme-chalk/src/transfer.scss +27 -31
  374. package/web-types.json +1 -1
  375. package/es/utils/isServer.d.ts +0 -2
  376. package/es/utils/isServer.mjs +0 -4
  377. package/es/utils/isServer.mjs.map +0 -1
  378. package/lib/utils/isServer.d.ts +0 -2
  379. package/lib/utils/isServer.js +0 -8
  380. package/lib/utils/isServer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue_vue_type_script_lang.mjs","sources":["../../../../../../packages/components/autocomplete/src/index.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"popper\"\n v-model:visible=\"suggestionVisible\"\n :placement=\"placement\"\n :fallback-placements=\"['bottom-start', 'top-start']\"\n :popper-class=\"`el-autocomplete__popper ${popperClass}`\"\n :append-to-body=\"popperAppendToBody\"\n :gpu-acceleration=\"false\"\n pure\n manual-mode\n effect=\"light\"\n trigger=\"click\"\n transition=\"el-zoom-in-top\"\n @show=\"onSuggestionShow\"\n >\n <div\n v-clickoutside=\"close\"\n :class=\"['el-autocomplete', $attrs.class]\"\n :style=\"$attrs.style\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"suggestionVisible\"\n :aria-owns=\"id\"\n >\n <el-input\n ref=\"inputRef\"\n v-bind=\"attrs\"\n :model-value=\"modelValue\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @clear=\"handleClear\"\n @keydown.up.prevent=\"highlight(highlightedIndex - 1)\"\n @keydown.down.prevent=\"highlight(highlightedIndex + 1)\"\n @keydown.enter=\"handleKeyEnter\"\n @keydown.tab=\"close\"\n >\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\"></slot>\n </template>\n <template v-if=\"$slots.append\" #append>\n <slot name=\"append\"></slot>\n </template>\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\"></slot>\n </template>\n <template v-if=\"$slots.suffix\" #suffix>\n <slot name=\"suffix\"></slot>\n </template>\n </el-input>\n </div>\n <template #content>\n <div\n ref=\"regionRef\"\n :class=\"[\n 'el-autocomplete-suggestion',\n suggestionLoading && 'is-loading',\n ]\"\n :style=\"{ minWidth: dropdownWidth, outline: 'none' }\"\n role=\"region\"\n >\n <el-scrollbar\n :id=\"id\"\n tag=\"ul\"\n wrap-class=\"el-autocomplete-suggestion__wrap\"\n view-class=\"el-autocomplete-suggestion__list\"\n role=\"listbox\"\n >\n <li v-if=\"suggestionLoading\">\n <el-icon class=\"is-loading\"><loading /></el-icon>\n </li>\n <template v-else>\n <li\n v-for=\"(item, index) in suggestions\"\n :id=\"`${id}-item-${index}`\"\n :key=\"index\"\n :class=\"{ highlighted: highlightedIndex === index }\"\n role=\"option\"\n :aria-selected=\"highlightedIndex === index\"\n @click=\"select(item)\"\n >\n <slot :item=\"item\">{{ item[valueKey] }}</slot>\n </li>\n </template>\n </el-scrollbar>\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, nextTick } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport debounce from 'lodash/debounce'\nimport { useAttrs } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { generateId, isArray } from '@element-plus/utils/util'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'\nimport { throwError } from '@element-plus/utils/error'\nimport ElInput from '@element-plus/components/input'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElIcon from '@element-plus/components/icon'\nimport { Loading } from '@element-plus/icons-vue'\n\nimport type { Placement } from '@element-plus/components/popper'\nimport type { PropType } from 'vue'\n\nexport default defineComponent({\n name: 'ElAutocomplete',\n components: {\n ElTooltip,\n ElInput,\n ElScrollbar,\n ElIcon,\n Loading,\n },\n directives: {\n clickoutside: ClickOutside,\n },\n inheritAttrs: false,\n props: {\n valueKey: {\n type: String,\n default: 'value',\n },\n modelValue: {\n type: [String, Number],\n default: '',\n },\n debounce: {\n type: Number,\n default: 300,\n },\n placement: {\n type: String as PropType<Placement>,\n validator: (val: string): boolean => {\n return [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ].includes(val)\n },\n default: 'bottom-start',\n },\n fetchSuggestions: {\n type: Function as PropType<\n (queryString: string, cb: (data: any[]) => void) => void\n >,\n default: NOOP,\n },\n popperClass: {\n type: String,\n default: '',\n },\n triggerOnFocus: {\n type: Boolean,\n default: true,\n },\n selectWhenUnmatched: {\n type: Boolean,\n default: false,\n },\n hideLoading: {\n type: Boolean,\n default: false,\n },\n popperAppendToBody: {\n type: Boolean,\n default: true,\n },\n highlightFirstItem: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n UPDATE_MODEL_EVENT,\n 'input',\n 'change',\n 'focus',\n 'blur',\n 'clear',\n 'select',\n ],\n setup(props, ctx) {\n const attrs = useAttrs()\n const suggestions = ref<any[]>([])\n const highlightedIndex = ref(-1)\n const dropdownWidth = ref('')\n const activated = ref(false)\n const suggestionDisabled = ref(false)\n const loading = ref(false)\n const inputRef = ref<{\n inputOrTextarea: HTMLInputElement | HTMLTextAreaElement\n focus: () => void\n $el: HTMLElement\n } | null>(null)\n const regionRef = ref<HTMLElement | null>(null)\n const popper = ref(null)\n\n const id = computed(() => {\n return `el-autocomplete-${generateId()}`\n })\n const suggestionVisible = computed(() => {\n const isValidData =\n isArray(suggestions.value) && suggestions.value.length > 0\n return (isValidData || loading.value) && activated.value\n })\n const suggestionLoading = computed(() => {\n return !props.hideLoading && loading.value\n })\n\n const onSuggestionShow = () => {\n nextTick(() => {\n if (suggestionVisible.value) {\n dropdownWidth.value = `${inputRef.value!.$el.offsetWidth}px`\n }\n })\n }\n\n onMounted(() => {\n inputRef.value!.inputOrTextarea.setAttribute('role', 'textbox')\n inputRef.value!.inputOrTextarea.setAttribute('aria-autocomplete', 'list')\n inputRef.value!.inputOrTextarea.setAttribute('aria-controls', 'id')\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n })\n\n const getData = (queryString: string) => {\n if (suggestionDisabled.value) {\n return\n }\n loading.value = true\n props.fetchSuggestions(queryString, (suggestionsArg) => {\n loading.value = false\n if (suggestionDisabled.value) {\n return\n }\n if (isArray(suggestionsArg)) {\n suggestions.value = suggestionsArg\n highlightedIndex.value = props.highlightFirstItem ? 0 : -1\n } else {\n throwError(\n 'ElAutocomplete',\n 'autocomplete suggestions must be an array'\n )\n }\n })\n }\n const debouncedGetData = debounce(getData, props.debounce)\n const handleInput = (value: string) => {\n ctx.emit('input', value)\n ctx.emit(UPDATE_MODEL_EVENT, value)\n suggestionDisabled.value = false\n if (!props.triggerOnFocus && !value) {\n suggestionDisabled.value = true\n suggestions.value = []\n return\n }\n debouncedGetData(value)\n }\n const handleChange = (value) => {\n ctx.emit('change', value)\n }\n const handleFocus = (e) => {\n activated.value = true\n ctx.emit('focus', e)\n if (props.triggerOnFocus) {\n debouncedGetData(String(props.modelValue))\n }\n }\n const handleBlur = (e) => {\n ctx.emit('blur', e)\n }\n const handleClear = () => {\n activated.value = false\n ctx.emit(UPDATE_MODEL_EVENT, '')\n ctx.emit('clear')\n }\n const handleKeyEnter = () => {\n if (\n suggestionVisible.value &&\n highlightedIndex.value >= 0 &&\n highlightedIndex.value < suggestions.value.length\n ) {\n select(suggestions.value[highlightedIndex.value])\n } else if (props.selectWhenUnmatched) {\n ctx.emit('select', { value: props.modelValue })\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n }\n const close = () => {\n activated.value = false\n }\n const focus = () => {\n inputRef.value?.focus()\n }\n const select = (item) => {\n ctx.emit('input', item[props.valueKey])\n ctx.emit(UPDATE_MODEL_EVENT, item[props.valueKey])\n ctx.emit('select', item)\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n const highlight = (index: number) => {\n if (!suggestionVisible.value || loading.value) {\n return\n }\n if (index < 0) {\n highlightedIndex.value = -1\n return\n }\n if (index >= suggestions.value.length) {\n index = suggestions.value.length - 1\n }\n const suggestion = regionRef.value!.querySelector(\n '.el-autocomplete-suggestion__wrap'\n )!\n const suggestionList = suggestion.querySelectorAll(\n '.el-autocomplete-suggestion__list li'\n )!\n const highlightItem = suggestionList[index]\n const scrollTop = suggestion.scrollTop\n const { offsetTop, scrollHeight } = highlightItem as HTMLElement\n\n if (offsetTop + scrollHeight > scrollTop + suggestion.clientHeight) {\n suggestion.scrollTop += scrollHeight\n }\n if (offsetTop < scrollTop) {\n suggestion.scrollTop -= scrollHeight\n }\n highlightedIndex.value = index\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n }\n\n return {\n attrs,\n suggestions,\n highlightedIndex,\n dropdownWidth,\n activated,\n suggestionDisabled,\n loading,\n inputRef,\n regionRef,\n popper,\n\n id,\n suggestionVisible,\n suggestionLoading,\n\n getData,\n handleInput,\n handleChange,\n handleFocus,\n handleBlur,\n handleClear,\n handleKeyEnter,\n close,\n focus,\n select,\n highlight,\n onSuggestionShow,\n }\n },\n})\n</script>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.vue_vue_type_script_lang.mjs","sources":["../../../../../../packages/components/autocomplete/src/index.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"popper\"\n v-model:visible=\"suggestionVisible\"\n :placement=\"placement\"\n :fallback-placements=\"['bottom-start', 'top-start']\"\n :popper-class=\"`el-autocomplete__popper ${popperClass}`\"\n :append-to-body=\"popperAppendToBody\"\n :gpu-acceleration=\"false\"\n pure\n manual-mode\n effect=\"light\"\n trigger=\"click\"\n transition=\"el-zoom-in-top\"\n persistent\n @show=\"onSuggestionShow\"\n >\n <div\n v-clickoutside=\"close\"\n :class=\"['el-autocomplete', $attrs.class]\"\n :style=\"$attrs.style\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"suggestionVisible\"\n :aria-owns=\"id\"\n >\n <el-input\n ref=\"inputRef\"\n v-bind=\"attrs\"\n :model-value=\"modelValue\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @clear=\"handleClear\"\n @keydown.up.prevent=\"highlight(highlightedIndex - 1)\"\n @keydown.down.prevent=\"highlight(highlightedIndex + 1)\"\n @keydown.enter=\"handleKeyEnter\"\n @keydown.tab=\"close\"\n >\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\"></slot>\n </template>\n <template v-if=\"$slots.append\" #append>\n <slot name=\"append\"></slot>\n </template>\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\"></slot>\n </template>\n <template v-if=\"$slots.suffix\" #suffix>\n <slot name=\"suffix\"></slot>\n </template>\n </el-input>\n </div>\n <template #content>\n <div\n ref=\"regionRef\"\n :class=\"[\n 'el-autocomplete-suggestion',\n suggestionLoading && 'is-loading',\n ]\"\n :style=\"{ minWidth: dropdownWidth, outline: 'none' }\"\n role=\"region\"\n >\n <el-scrollbar\n :id=\"id\"\n tag=\"ul\"\n wrap-class=\"el-autocomplete-suggestion__wrap\"\n view-class=\"el-autocomplete-suggestion__list\"\n role=\"listbox\"\n >\n <li v-if=\"suggestionLoading\">\n <el-icon class=\"is-loading\"><loading /></el-icon>\n </li>\n <template v-else>\n <li\n v-for=\"(item, index) in suggestions\"\n :id=\"`${id}-item-${index}`\"\n :key=\"index\"\n :class=\"{ highlighted: highlightedIndex === index }\"\n role=\"option\"\n :aria-selected=\"highlightedIndex === index\"\n @click=\"select(item)\"\n >\n <slot :item=\"item\">{{ item[valueKey] }}</slot>\n </li>\n </template>\n </el-scrollbar>\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, nextTick } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport debounce from 'lodash/debounce'\nimport { useAttrs } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { generateId, isArray } from '@element-plus/utils/util'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'\nimport { throwError } from '@element-plus/utils/error'\nimport ElInput from '@element-plus/components/input'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElIcon from '@element-plus/components/icon'\nimport { Loading } from '@element-plus/icons-vue'\n\nimport type { Placement } from '@element-plus/components/popper'\nimport type { PropType } from 'vue'\n\nexport default defineComponent({\n name: 'ElAutocomplete',\n components: {\n ElTooltip,\n ElInput,\n ElScrollbar,\n ElIcon,\n Loading,\n },\n directives: {\n clickoutside: ClickOutside,\n },\n inheritAttrs: false,\n props: {\n valueKey: {\n type: String,\n default: 'value',\n },\n modelValue: {\n type: [String, Number],\n default: '',\n },\n debounce: {\n type: Number,\n default: 300,\n },\n placement: {\n type: String as PropType<Placement>,\n validator: (val: string): boolean => {\n return [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ].includes(val)\n },\n default: 'bottom-start',\n },\n fetchSuggestions: {\n type: Function as PropType<\n (queryString: string, cb: (data: any[]) => void) => void\n >,\n default: NOOP,\n },\n popperClass: {\n type: String,\n default: '',\n },\n triggerOnFocus: {\n type: Boolean,\n default: true,\n },\n selectWhenUnmatched: {\n type: Boolean,\n default: false,\n },\n hideLoading: {\n type: Boolean,\n default: false,\n },\n popperAppendToBody: {\n type: Boolean,\n default: true,\n },\n highlightFirstItem: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n UPDATE_MODEL_EVENT,\n 'input',\n 'change',\n 'focus',\n 'blur',\n 'clear',\n 'select',\n ],\n setup(props, ctx) {\n const attrs = useAttrs()\n const suggestions = ref<any[]>([])\n const highlightedIndex = ref(-1)\n const dropdownWidth = ref('')\n const activated = ref(false)\n const suggestionDisabled = ref(false)\n const loading = ref(false)\n const inputRef = ref<{\n inputOrTextarea: HTMLInputElement | HTMLTextAreaElement\n focus: () => void\n $el: HTMLElement\n } | null>(null)\n const regionRef = ref<HTMLElement | null>(null)\n const popper = ref(null)\n\n const id = computed(() => {\n return `el-autocomplete-${generateId()}`\n })\n const suggestionVisible = computed(() => {\n const isValidData =\n isArray(suggestions.value) && suggestions.value.length > 0\n return (isValidData || loading.value) && activated.value\n })\n const suggestionLoading = computed(() => {\n return !props.hideLoading && loading.value\n })\n\n const onSuggestionShow = () => {\n nextTick(() => {\n if (suggestionVisible.value) {\n dropdownWidth.value = `${inputRef.value!.$el.offsetWidth}px`\n }\n })\n }\n\n onMounted(() => {\n inputRef.value!.inputOrTextarea.setAttribute('role', 'textbox')\n inputRef.value!.inputOrTextarea.setAttribute('aria-autocomplete', 'list')\n inputRef.value!.inputOrTextarea.setAttribute('aria-controls', 'id')\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n })\n\n const getData = (queryString: string) => {\n if (suggestionDisabled.value) {\n return\n }\n loading.value = true\n props.fetchSuggestions(queryString, (suggestionsArg) => {\n loading.value = false\n if (suggestionDisabled.value) {\n return\n }\n if (isArray(suggestionsArg)) {\n suggestions.value = suggestionsArg\n highlightedIndex.value = props.highlightFirstItem ? 0 : -1\n } else {\n throwError(\n 'ElAutocomplete',\n 'autocomplete suggestions must be an array'\n )\n }\n })\n }\n const debouncedGetData = debounce(getData, props.debounce)\n const handleInput = (value: string) => {\n ctx.emit('input', value)\n ctx.emit(UPDATE_MODEL_EVENT, value)\n suggestionDisabled.value = false\n if (!props.triggerOnFocus && !value) {\n suggestionDisabled.value = true\n suggestions.value = []\n return\n }\n debouncedGetData(value)\n }\n const handleChange = (value) => {\n ctx.emit('change', value)\n }\n const handleFocus = (e) => {\n activated.value = true\n ctx.emit('focus', e)\n if (props.triggerOnFocus) {\n debouncedGetData(String(props.modelValue))\n }\n }\n const handleBlur = (e) => {\n ctx.emit('blur', e)\n }\n const handleClear = () => {\n activated.value = false\n ctx.emit(UPDATE_MODEL_EVENT, '')\n ctx.emit('clear')\n }\n const handleKeyEnter = () => {\n if (\n suggestionVisible.value &&\n highlightedIndex.value >= 0 &&\n highlightedIndex.value < suggestions.value.length\n ) {\n select(suggestions.value[highlightedIndex.value])\n } else if (props.selectWhenUnmatched) {\n ctx.emit('select', { value: props.modelValue })\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n }\n const close = () => {\n activated.value = false\n }\n const focus = () => {\n inputRef.value?.focus()\n }\n const select = (item) => {\n ctx.emit('input', item[props.valueKey])\n ctx.emit(UPDATE_MODEL_EVENT, item[props.valueKey])\n ctx.emit('select', item)\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n const highlight = (index: number) => {\n if (!suggestionVisible.value || loading.value) {\n return\n }\n if (index < 0) {\n highlightedIndex.value = -1\n return\n }\n if (index >= suggestions.value.length) {\n index = suggestions.value.length - 1\n }\n const suggestion = regionRef.value!.querySelector(\n '.el-autocomplete-suggestion__wrap'\n )!\n const suggestionList = suggestion.querySelectorAll(\n '.el-autocomplete-suggestion__list li'\n )!\n const highlightItem = suggestionList[index]\n const scrollTop = suggestion.scrollTop\n const { offsetTop, scrollHeight } = highlightItem as HTMLElement\n\n if (offsetTop + scrollHeight > scrollTop + suggestion.clientHeight) {\n suggestion.scrollTop += scrollHeight\n }\n if (offsetTop < scrollTop) {\n suggestion.scrollTop -= scrollHeight\n }\n highlightedIndex.value = index\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n }\n\n return {\n attrs,\n suggestions,\n highlightedIndex,\n dropdownWidth,\n activated,\n suggestionDisabled,\n loading,\n inputRef,\n regionRef,\n popper,\n\n id,\n suggestionVisible,\n suggestionLoading,\n\n getData,\n handleInput,\n handleChange,\n handleFocus,\n handleBlur,\n handleClear,\n handleKeyEnter,\n close,\n focus,\n select,\n highlight,\n onSuggestionShow,\n }\n },\n})\n</script>\n"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
24
24
  effect: "light",
25
25
  trigger: "click",
26
26
  transition: "el-zoom-in-top",
27
+ persistent: "",
27
28
  onShow: _ctx.onSuggestionShow
28
29
  }, {
29
30
  content: withCtx(() => [
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue_vue_type_template_id_2f09f285_lang.mjs","sources":["../../../../../../packages/components/autocomplete/src/index.vue?vue&type=template&id=2f09f285&lang.js"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"popper\"\n v-model:visible=\"suggestionVisible\"\n :placement=\"placement\"\n :fallback-placements=\"['bottom-start', 'top-start']\"\n :popper-class=\"`el-autocomplete__popper ${popperClass}`\"\n :append-to-body=\"popperAppendToBody\"\n :gpu-acceleration=\"false\"\n pure\n manual-mode\n effect=\"light\"\n trigger=\"click\"\n transition=\"el-zoom-in-top\"\n @show=\"onSuggestionShow\"\n >\n <div\n v-clickoutside=\"close\"\n :class=\"['el-autocomplete', $attrs.class]\"\n :style=\"$attrs.style\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"suggestionVisible\"\n :aria-owns=\"id\"\n >\n <el-input\n ref=\"inputRef\"\n v-bind=\"attrs\"\n :model-value=\"modelValue\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @clear=\"handleClear\"\n @keydown.up.prevent=\"highlight(highlightedIndex - 1)\"\n @keydown.down.prevent=\"highlight(highlightedIndex + 1)\"\n @keydown.enter=\"handleKeyEnter\"\n @keydown.tab=\"close\"\n >\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\"></slot>\n </template>\n <template v-if=\"$slots.append\" #append>\n <slot name=\"append\"></slot>\n </template>\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\"></slot>\n </template>\n <template v-if=\"$slots.suffix\" #suffix>\n <slot name=\"suffix\"></slot>\n </template>\n </el-input>\n </div>\n <template #content>\n <div\n ref=\"regionRef\"\n :class=\"[\n 'el-autocomplete-suggestion',\n suggestionLoading && 'is-loading',\n ]\"\n :style=\"{ minWidth: dropdownWidth, outline: 'none' }\"\n role=\"region\"\n >\n <el-scrollbar\n :id=\"id\"\n tag=\"ul\"\n wrap-class=\"el-autocomplete-suggestion__wrap\"\n view-class=\"el-autocomplete-suggestion__list\"\n role=\"listbox\"\n >\n <li v-if=\"suggestionLoading\">\n <el-icon class=\"is-loading\"><loading /></el-icon>\n </li>\n <template v-else>\n <li\n v-for=\"(item, index) in suggestions\"\n :id=\"`${id}-item-${index}`\"\n :key=\"index\"\n :class=\"{ highlighted: highlightedIndex === index }\"\n role=\"option\"\n :aria-selected=\"highlightedIndex === index\"\n @click=\"select(item)\"\n >\n <slot :item=\"item\">{{ item[valueKey] }}</slot>\n </li>\n </template>\n </el-scrollbar>\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, nextTick } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport debounce from 'lodash/debounce'\nimport { useAttrs } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { generateId, isArray } from '@element-plus/utils/util'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'\nimport { throwError } from '@element-plus/utils/error'\nimport ElInput from '@element-plus/components/input'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElIcon from '@element-plus/components/icon'\nimport { Loading } from '@element-plus/icons-vue'\n\nimport type { Placement } from '@element-plus/components/popper'\nimport type { PropType } from 'vue'\n\nexport default defineComponent({\n name: 'ElAutocomplete',\n components: {\n ElTooltip,\n ElInput,\n ElScrollbar,\n ElIcon,\n Loading,\n },\n directives: {\n clickoutside: ClickOutside,\n },\n inheritAttrs: false,\n props: {\n valueKey: {\n type: String,\n default: 'value',\n },\n modelValue: {\n type: [String, Number],\n default: '',\n },\n debounce: {\n type: Number,\n default: 300,\n },\n placement: {\n type: String as PropType<Placement>,\n validator: (val: string): boolean => {\n return [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ].includes(val)\n },\n default: 'bottom-start',\n },\n fetchSuggestions: {\n type: Function as PropType<\n (queryString: string, cb: (data: any[]) => void) => void\n >,\n default: NOOP,\n },\n popperClass: {\n type: String,\n default: '',\n },\n triggerOnFocus: {\n type: Boolean,\n default: true,\n },\n selectWhenUnmatched: {\n type: Boolean,\n default: false,\n },\n hideLoading: {\n type: Boolean,\n default: false,\n },\n popperAppendToBody: {\n type: Boolean,\n default: true,\n },\n highlightFirstItem: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n UPDATE_MODEL_EVENT,\n 'input',\n 'change',\n 'focus',\n 'blur',\n 'clear',\n 'select',\n ],\n setup(props, ctx) {\n const attrs = useAttrs()\n const suggestions = ref<any[]>([])\n const highlightedIndex = ref(-1)\n const dropdownWidth = ref('')\n const activated = ref(false)\n const suggestionDisabled = ref(false)\n const loading = ref(false)\n const inputRef = ref<{\n inputOrTextarea: HTMLInputElement | HTMLTextAreaElement\n focus: () => void\n $el: HTMLElement\n } | null>(null)\n const regionRef = ref<HTMLElement | null>(null)\n const popper = ref(null)\n\n const id = computed(() => {\n return `el-autocomplete-${generateId()}`\n })\n const suggestionVisible = computed(() => {\n const isValidData =\n isArray(suggestions.value) && suggestions.value.length > 0\n return (isValidData || loading.value) && activated.value\n })\n const suggestionLoading = computed(() => {\n return !props.hideLoading && loading.value\n })\n\n const onSuggestionShow = () => {\n nextTick(() => {\n if (suggestionVisible.value) {\n dropdownWidth.value = `${inputRef.value!.$el.offsetWidth}px`\n }\n })\n }\n\n onMounted(() => {\n inputRef.value!.inputOrTextarea.setAttribute('role', 'textbox')\n inputRef.value!.inputOrTextarea.setAttribute('aria-autocomplete', 'list')\n inputRef.value!.inputOrTextarea.setAttribute('aria-controls', 'id')\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n })\n\n const getData = (queryString: string) => {\n if (suggestionDisabled.value) {\n return\n }\n loading.value = true\n props.fetchSuggestions(queryString, (suggestionsArg) => {\n loading.value = false\n if (suggestionDisabled.value) {\n return\n }\n if (isArray(suggestionsArg)) {\n suggestions.value = suggestionsArg\n highlightedIndex.value = props.highlightFirstItem ? 0 : -1\n } else {\n throwError(\n 'ElAutocomplete',\n 'autocomplete suggestions must be an array'\n )\n }\n })\n }\n const debouncedGetData = debounce(getData, props.debounce)\n const handleInput = (value: string) => {\n ctx.emit('input', value)\n ctx.emit(UPDATE_MODEL_EVENT, value)\n suggestionDisabled.value = false\n if (!props.triggerOnFocus && !value) {\n suggestionDisabled.value = true\n suggestions.value = []\n return\n }\n debouncedGetData(value)\n }\n const handleChange = (value) => {\n ctx.emit('change', value)\n }\n const handleFocus = (e) => {\n activated.value = true\n ctx.emit('focus', e)\n if (props.triggerOnFocus) {\n debouncedGetData(String(props.modelValue))\n }\n }\n const handleBlur = (e) => {\n ctx.emit('blur', e)\n }\n const handleClear = () => {\n activated.value = false\n ctx.emit(UPDATE_MODEL_EVENT, '')\n ctx.emit('clear')\n }\n const handleKeyEnter = () => {\n if (\n suggestionVisible.value &&\n highlightedIndex.value >= 0 &&\n highlightedIndex.value < suggestions.value.length\n ) {\n select(suggestions.value[highlightedIndex.value])\n } else if (props.selectWhenUnmatched) {\n ctx.emit('select', { value: props.modelValue })\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n }\n const close = () => {\n activated.value = false\n }\n const focus = () => {\n inputRef.value?.focus()\n }\n const select = (item) => {\n ctx.emit('input', item[props.valueKey])\n ctx.emit(UPDATE_MODEL_EVENT, item[props.valueKey])\n ctx.emit('select', item)\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n const highlight = (index: number) => {\n if (!suggestionVisible.value || loading.value) {\n return\n }\n if (index < 0) {\n highlightedIndex.value = -1\n return\n }\n if (index >= suggestions.value.length) {\n index = suggestions.value.length - 1\n }\n const suggestion = regionRef.value!.querySelector(\n '.el-autocomplete-suggestion__wrap'\n )!\n const suggestionList = suggestion.querySelectorAll(\n '.el-autocomplete-suggestion__list li'\n )!\n const highlightItem = suggestionList[index]\n const scrollTop = suggestion.scrollTop\n const { offsetTop, scrollHeight } = highlightItem as HTMLElement\n\n if (offsetTop + scrollHeight > scrollTop + suggestion.clientHeight) {\n suggestion.scrollTop += scrollHeight\n }\n if (offsetTop < scrollTop) {\n suggestion.scrollTop -= scrollHeight\n }\n highlightedIndex.value = index\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n }\n\n return {\n attrs,\n suggestions,\n highlightedIndex,\n dropdownWidth,\n activated,\n suggestionDisabled,\n loading,\n inputRef,\n regionRef,\n popper,\n\n id,\n suggestionVisible,\n suggestionLoading,\n\n getData,\n handleInput,\n handleChange,\n handleFocus,\n handleBlur,\n handleClear,\n handleKeyEnter,\n close,\n focus,\n select,\n highlight,\n onSuggestionShow,\n }\n },\n})\n</script>\n"],"names":["_createVNode"],"mappings":";;;;;;;;;;;;;;;wBACE;IACE;IACQ;;IACP;IACA;IACA;IACA;IACA;IACD;IACA;IACA,MAAM,EAAC;;IAEP;gCACuB;;;;;;;;;QA8ClBA;YACG,EAAC;;;UAGF;UACD;;UAEA;gBACK;;;;;;;kCAGoC;;;;;;;gDAKb;;yDAED;;;;;;;;;;;;;;;;;QA5D9B;;QAEDA;uBACa,EAAC;uBACA;;;;UAMX,aAAW;UACX,SAAO;kBACD,EAAE;mBACD,gBAAW;;kCAEA;;;;;;;;WAMH;;;;;;;;;;6BAGsB;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.vue_vue_type_template_id_2f09f285_lang.mjs","sources":["../../../../../../packages/components/autocomplete/src/index.vue?vue&type=template&id=2f09f285&lang.js"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"popper\"\n v-model:visible=\"suggestionVisible\"\n :placement=\"placement\"\n :fallback-placements=\"['bottom-start', 'top-start']\"\n :popper-class=\"`el-autocomplete__popper ${popperClass}`\"\n :append-to-body=\"popperAppendToBody\"\n :gpu-acceleration=\"false\"\n pure\n manual-mode\n effect=\"light\"\n trigger=\"click\"\n transition=\"el-zoom-in-top\"\n persistent\n @show=\"onSuggestionShow\"\n >\n <div\n v-clickoutside=\"close\"\n :class=\"['el-autocomplete', $attrs.class]\"\n :style=\"$attrs.style\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"suggestionVisible\"\n :aria-owns=\"id\"\n >\n <el-input\n ref=\"inputRef\"\n v-bind=\"attrs\"\n :model-value=\"modelValue\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @clear=\"handleClear\"\n @keydown.up.prevent=\"highlight(highlightedIndex - 1)\"\n @keydown.down.prevent=\"highlight(highlightedIndex + 1)\"\n @keydown.enter=\"handleKeyEnter\"\n @keydown.tab=\"close\"\n >\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\"></slot>\n </template>\n <template v-if=\"$slots.append\" #append>\n <slot name=\"append\"></slot>\n </template>\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\"></slot>\n </template>\n <template v-if=\"$slots.suffix\" #suffix>\n <slot name=\"suffix\"></slot>\n </template>\n </el-input>\n </div>\n <template #content>\n <div\n ref=\"regionRef\"\n :class=\"[\n 'el-autocomplete-suggestion',\n suggestionLoading && 'is-loading',\n ]\"\n :style=\"{ minWidth: dropdownWidth, outline: 'none' }\"\n role=\"region\"\n >\n <el-scrollbar\n :id=\"id\"\n tag=\"ul\"\n wrap-class=\"el-autocomplete-suggestion__wrap\"\n view-class=\"el-autocomplete-suggestion__list\"\n role=\"listbox\"\n >\n <li v-if=\"suggestionLoading\">\n <el-icon class=\"is-loading\"><loading /></el-icon>\n </li>\n <template v-else>\n <li\n v-for=\"(item, index) in suggestions\"\n :id=\"`${id}-item-${index}`\"\n :key=\"index\"\n :class=\"{ highlighted: highlightedIndex === index }\"\n role=\"option\"\n :aria-selected=\"highlightedIndex === index\"\n @click=\"select(item)\"\n >\n <slot :item=\"item\">{{ item[valueKey] }}</slot>\n </li>\n </template>\n </el-scrollbar>\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, nextTick } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport debounce from 'lodash/debounce'\nimport { useAttrs } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { generateId, isArray } from '@element-plus/utils/util'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'\nimport { throwError } from '@element-plus/utils/error'\nimport ElInput from '@element-plus/components/input'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElIcon from '@element-plus/components/icon'\nimport { Loading } from '@element-plus/icons-vue'\n\nimport type { Placement } from '@element-plus/components/popper'\nimport type { PropType } from 'vue'\n\nexport default defineComponent({\n name: 'ElAutocomplete',\n components: {\n ElTooltip,\n ElInput,\n ElScrollbar,\n ElIcon,\n Loading,\n },\n directives: {\n clickoutside: ClickOutside,\n },\n inheritAttrs: false,\n props: {\n valueKey: {\n type: String,\n default: 'value',\n },\n modelValue: {\n type: [String, Number],\n default: '',\n },\n debounce: {\n type: Number,\n default: 300,\n },\n placement: {\n type: String as PropType<Placement>,\n validator: (val: string): boolean => {\n return [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ].includes(val)\n },\n default: 'bottom-start',\n },\n fetchSuggestions: {\n type: Function as PropType<\n (queryString: string, cb: (data: any[]) => void) => void\n >,\n default: NOOP,\n },\n popperClass: {\n type: String,\n default: '',\n },\n triggerOnFocus: {\n type: Boolean,\n default: true,\n },\n selectWhenUnmatched: {\n type: Boolean,\n default: false,\n },\n hideLoading: {\n type: Boolean,\n default: false,\n },\n popperAppendToBody: {\n type: Boolean,\n default: true,\n },\n highlightFirstItem: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n UPDATE_MODEL_EVENT,\n 'input',\n 'change',\n 'focus',\n 'blur',\n 'clear',\n 'select',\n ],\n setup(props, ctx) {\n const attrs = useAttrs()\n const suggestions = ref<any[]>([])\n const highlightedIndex = ref(-1)\n const dropdownWidth = ref('')\n const activated = ref(false)\n const suggestionDisabled = ref(false)\n const loading = ref(false)\n const inputRef = ref<{\n inputOrTextarea: HTMLInputElement | HTMLTextAreaElement\n focus: () => void\n $el: HTMLElement\n } | null>(null)\n const regionRef = ref<HTMLElement | null>(null)\n const popper = ref(null)\n\n const id = computed(() => {\n return `el-autocomplete-${generateId()}`\n })\n const suggestionVisible = computed(() => {\n const isValidData =\n isArray(suggestions.value) && suggestions.value.length > 0\n return (isValidData || loading.value) && activated.value\n })\n const suggestionLoading = computed(() => {\n return !props.hideLoading && loading.value\n })\n\n const onSuggestionShow = () => {\n nextTick(() => {\n if (suggestionVisible.value) {\n dropdownWidth.value = `${inputRef.value!.$el.offsetWidth}px`\n }\n })\n }\n\n onMounted(() => {\n inputRef.value!.inputOrTextarea.setAttribute('role', 'textbox')\n inputRef.value!.inputOrTextarea.setAttribute('aria-autocomplete', 'list')\n inputRef.value!.inputOrTextarea.setAttribute('aria-controls', 'id')\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n })\n\n const getData = (queryString: string) => {\n if (suggestionDisabled.value) {\n return\n }\n loading.value = true\n props.fetchSuggestions(queryString, (suggestionsArg) => {\n loading.value = false\n if (suggestionDisabled.value) {\n return\n }\n if (isArray(suggestionsArg)) {\n suggestions.value = suggestionsArg\n highlightedIndex.value = props.highlightFirstItem ? 0 : -1\n } else {\n throwError(\n 'ElAutocomplete',\n 'autocomplete suggestions must be an array'\n )\n }\n })\n }\n const debouncedGetData = debounce(getData, props.debounce)\n const handleInput = (value: string) => {\n ctx.emit('input', value)\n ctx.emit(UPDATE_MODEL_EVENT, value)\n suggestionDisabled.value = false\n if (!props.triggerOnFocus && !value) {\n suggestionDisabled.value = true\n suggestions.value = []\n return\n }\n debouncedGetData(value)\n }\n const handleChange = (value) => {\n ctx.emit('change', value)\n }\n const handleFocus = (e) => {\n activated.value = true\n ctx.emit('focus', e)\n if (props.triggerOnFocus) {\n debouncedGetData(String(props.modelValue))\n }\n }\n const handleBlur = (e) => {\n ctx.emit('blur', e)\n }\n const handleClear = () => {\n activated.value = false\n ctx.emit(UPDATE_MODEL_EVENT, '')\n ctx.emit('clear')\n }\n const handleKeyEnter = () => {\n if (\n suggestionVisible.value &&\n highlightedIndex.value >= 0 &&\n highlightedIndex.value < suggestions.value.length\n ) {\n select(suggestions.value[highlightedIndex.value])\n } else if (props.selectWhenUnmatched) {\n ctx.emit('select', { value: props.modelValue })\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n }\n const close = () => {\n activated.value = false\n }\n const focus = () => {\n inputRef.value?.focus()\n }\n const select = (item) => {\n ctx.emit('input', item[props.valueKey])\n ctx.emit(UPDATE_MODEL_EVENT, item[props.valueKey])\n ctx.emit('select', item)\n nextTick(() => {\n suggestions.value = []\n highlightedIndex.value = -1\n })\n }\n const highlight = (index: number) => {\n if (!suggestionVisible.value || loading.value) {\n return\n }\n if (index < 0) {\n highlightedIndex.value = -1\n return\n }\n if (index >= suggestions.value.length) {\n index = suggestions.value.length - 1\n }\n const suggestion = regionRef.value!.querySelector(\n '.el-autocomplete-suggestion__wrap'\n )!\n const suggestionList = suggestion.querySelectorAll(\n '.el-autocomplete-suggestion__list li'\n )!\n const highlightItem = suggestionList[index]\n const scrollTop = suggestion.scrollTop\n const { offsetTop, scrollHeight } = highlightItem as HTMLElement\n\n if (offsetTop + scrollHeight > scrollTop + suggestion.clientHeight) {\n suggestion.scrollTop += scrollHeight\n }\n if (offsetTop < scrollTop) {\n suggestion.scrollTop -= scrollHeight\n }\n highlightedIndex.value = index\n inputRef.value!.inputOrTextarea.setAttribute(\n 'aria-activedescendant',\n `${id.value}-item-${highlightedIndex.value}`\n )\n }\n\n return {\n attrs,\n suggestions,\n highlightedIndex,\n dropdownWidth,\n activated,\n suggestionDisabled,\n loading,\n inputRef,\n regionRef,\n popper,\n\n id,\n suggestionVisible,\n suggestionLoading,\n\n getData,\n handleInput,\n handleChange,\n handleFocus,\n handleBlur,\n handleClear,\n handleKeyEnter,\n close,\n focus,\n select,\n highlight,\n onSuggestionShow,\n }\n },\n})\n</script>\n"],"names":["_createVNode"],"mappings":";;;;;;;;;;;;;;;wBACE;IACE;IACQ;;IACP;IACA;IACA;IACA;IACA;IACD;IACA;IACA;IACA;;IAEA;gCACuB;;;;;;;;;QA8ClBA;YACG,EAAC;;;UAGF;UACD;;UAEA;gBACK;;;;;;;kCAGoC;;;;;;;gDAKb;;yDAED;;;;;;;;;;;;;;;;;QA5D9B;;QAEDA;uBACa,EAAC;uBACA;;;;UAMX,aAAW;UACX,SAAO;kBACD,EAAE;mBACD,gBAAW;;kCAEA;;;;;;;;WAMH;;;;;;;;;;6BAGsB;;;;;;;;;;;;;;;;;;;;"}
@@ -877,6 +877,7 @@ declare const _Cascader: SFCWithInstall<import("vue").DefineComponent<{
877
877
  passwordVisible: import("vue").Ref<boolean>;
878
878
  inputOrTextarea: import("vue").ComputedRef<HTMLInputElement | HTMLTextAreaElement | undefined>;
879
879
  suffixVisible: import("vue").ComputedRef<boolean>;
880
+ needStatusIcon: import("vue").ComputedRef<boolean>;
880
881
  resizeTextarea: () => void;
881
882
  handleInput: (event: Event) => void;
882
883
  handleChange: (event: Event) => void;
@@ -1025,6 +1026,7 @@ declare const _Cascader: SFCWithInstall<import("vue").DefineComponent<{
1025
1026
  passwordVisible: import("vue").Ref<boolean>;
1026
1027
  inputOrTextarea: import("vue").ComputedRef<HTMLInputElement | HTMLTextAreaElement | undefined>;
1027
1028
  suffixVisible: import("vue").ComputedRef<boolean>;
1029
+ needStatusIcon: import("vue").ComputedRef<boolean>;
1028
1030
  resizeTextarea: () => void;
1029
1031
  handleInput: (event: Event) => void;
1030
1032
  handleChange: (event: Event) => void;
@@ -2548,6 +2550,7 @@ export declare const ElCascader: SFCWithInstall<import("vue").DefineComponent<{
2548
2550
  passwordVisible: import("vue").Ref<boolean>;
2549
2551
  inputOrTextarea: import("vue").ComputedRef<HTMLInputElement | HTMLTextAreaElement | undefined>;
2550
2552
  suffixVisible: import("vue").ComputedRef<boolean>;
2553
+ needStatusIcon: import("vue").ComputedRef<boolean>;
2551
2554
  resizeTextarea: () => void;
2552
2555
  handleInput: (event: Event) => void;
2553
2556
  handleChange: (event: Event) => void;
@@ -2696,6 +2699,7 @@ export declare const ElCascader: SFCWithInstall<import("vue").DefineComponent<{
2696
2699
  passwordVisible: import("vue").Ref<boolean>;
2697
2700
  inputOrTextarea: import("vue").ComputedRef<HTMLInputElement | HTMLTextAreaElement | undefined>;
2698
2701
  suffixVisible: import("vue").ComputedRef<boolean>;
2702
+ needStatusIcon: import("vue").ComputedRef<boolean>;
2699
2703
  resizeTextarea: () => void;
2700
2704
  handleInput: (event: Event) => void;
2701
2705
  handleChange: (event: Event) => void;
@@ -881,6 +881,7 @@ declare const _default: import("vue").DefineComponent<{
881
881
  passwordVisible: Ref<boolean>;
882
882
  inputOrTextarea: ComputedRef<HTMLInputElement | HTMLTextAreaElement | undefined>;
883
883
  suffixVisible: ComputedRef<boolean>;
884
+ needStatusIcon: ComputedRef<boolean>;
884
885
  resizeTextarea: () => void;
885
886
  handleInput: (event: Event) => void;
886
887
  handleChange: (event: Event) => void;
@@ -1029,6 +1030,7 @@ declare const _default: import("vue").DefineComponent<{
1029
1030
  passwordVisible: Ref<boolean>;
1030
1031
  inputOrTextarea: ComputedRef<HTMLInputElement | HTMLTextAreaElement | undefined>;
1031
1032
  suffixVisible: ComputedRef<boolean>;
1033
+ needStatusIcon: ComputedRef<boolean>;
1032
1034
  resizeTextarea: () => void;
1033
1035
  handleInput: (event: Event) => void;
1034
1036
  handleChange: (event: Event) => void;
@@ -28,10 +28,10 @@ var script = defineComponent({
28
28
  },
29
29
  emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, "close", "expand-change"],
30
30
  setup(props, { emit, slots }) {
31
- let initialLoaded = true;
32
31
  let manualChecked = false;
33
32
  const config = useCascaderConfig(props);
34
33
  let store = null;
34
+ const initialLoaded = ref(true);
35
35
  const menuList = ref([]);
36
36
  const checkedValue = ref(null);
37
37
  const menus = ref([]);
@@ -46,13 +46,13 @@ var script = defineComponent({
46
46
  store = new Store(options, cfg);
47
47
  menus.value = [store.getNodes()];
48
48
  if (cfg.lazy && isEmpty(props.options)) {
49
- initialLoaded = false;
49
+ initialLoaded.value = false;
50
50
  lazyLoad(void 0, (list) => {
51
51
  if (list) {
52
52
  store = new Store(list, cfg);
53
53
  menus.value = [store.getNodes()];
54
54
  }
55
- initialLoaded = true;
55
+ initialLoaded.value = true;
56
56
  syncCheckedValue(false, true);
57
57
  });
58
58
  } else {
@@ -133,7 +133,7 @@ var script = defineComponent({
133
133
  const { modelValue } = props;
134
134
  const { lazy, multiple, checkStrictly } = config.value;
135
135
  const leafOnly = !checkStrictly;
136
- if (!initialLoaded || manualChecked || !forced && isEqual(modelValue, checkedValue.value))
136
+ if (!initialLoaded.value || manualChecked || !forced && isEqual(modelValue, checkedValue.value))
137
137
  return;
138
138
  if (lazy && !loaded) {
139
139
  const values = deduplicate(arrayFlat(coerceTruthyValueToArray(modelValue)));
@@ -219,6 +219,7 @@ var script = defineComponent({
219
219
  expandingNode,
220
220
  checkedNodes,
221
221
  isHoverMenu,
222
+ initialLoaded,
222
223
  renderLabelFn,
223
224
  lazyLoad,
224
225
  expandNode,
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue_vue_type_script_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/index.vue"],"sourcesContent":["<template>\n <div\n :class=\"['el-cascader-panel', border && 'is-bordered']\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item)\"\n :index=\"index\"\n :nodes=\"menu\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport isEqual from 'lodash/isEqual'\nimport { isClient } from '@vueuse/core'\nimport { EVENT_CODE, focusNode, getSibling } from '@element-plus/utils/aria'\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@element-plus/utils/constants'\nimport scrollIntoView from '@element-plus/utils/scroll-into-view'\nimport {\n arrayFlat,\n coerceTruthyValueToArray,\n deduplicate,\n isEmpty,\n} from '@element-plus/utils/util'\n\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node, { ExpandTrigger } from './node'\nimport { CommonProps, useCascaderConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-plus/utils/types'\nimport type {\n CascaderValue,\n CascaderNodeValue,\n CascaderOption,\n RenderLabel,\n default as CascaderNode,\n} from './node'\n\nimport type { ElCascaderPanelContext } from './types'\n\nexport default defineComponent({\n name: 'ElCascaderPanel',\n\n components: {\n ElCascaderMenu,\n },\n\n props: {\n ...CommonProps,\n border: {\n type: Boolean,\n default: true,\n },\n renderLabel: Function as PropType<RenderLabel>,\n },\n\n emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, 'close', 'expand-change'],\n\n setup(props, { emit, slots }) {\n let initialLoaded = true\n // for interrupt sync check status in lazy mode\n let manualChecked = false\n\n const config = useCascaderConfig(props)\n\n let store: Nullable<Store> = null\n const menuList = ref<any[]>([])\n const checkedValue = ref<Nullable<CascaderValue>>(null)\n const menus = ref<CascaderNode[][]>([])\n const expandingNode = ref<Nullable<CascaderNode>>(null)\n const checkedNodes = ref<CascaderNode[]>([])\n\n const isHoverMenu = computed(\n () => config.value.expandTrigger === ExpandTrigger.HOVER\n )\n const renderLabelFn = computed(() => props.renderLabel || slots.default)\n\n const initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n }\n\n const lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n dataList && store?.appendNodes(dataList, parent as any)\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n cb && cb(dataList)\n }\n\n cfg.lazyLoad(node, resolve as any)\n }\n\n const expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: Nullable<CascaderNode>\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n }\n\n const handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n ) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && !checkStrictly && expandParentNode(node)\n }\n\n const expandParentNode = (node) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n }\n\n const getFlattedNodes = (leafOnly: boolean) => {\n return store?.getFlattedNodes(leafOnly)\n }\n\n const getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter((node) => node.checked !== false)\n }\n\n const clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n }\n\n const calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : values[0] ?? null\n }\n\n const syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = deduplicate(\n arrayFlat(coerceTruthyValueToArray(modelValue))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple\n ? coerceTruthyValueToArray(modelValue)\n : [modelValue]\n const nodes = deduplicate(\n values.map((val) => store?.getNodeByValue(val, leafOnly))\n ) as Node[]\n syncMenuState(nodes, false)\n checkedValue.value = modelValue!\n }\n }\n\n const syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n ) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = null\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n newNodes.forEach((node) => node.doCheck(true))\n\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n }\n\n const scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n const container = menuElement.querySelector('.el-scrollbar__wrap')\n const activeNode =\n menuElement.querySelector('.el-cascader-node.is-active') ||\n menuElement.querySelector('.el-cascader-node.in-active-path')\n scrollIntoView(container, activeNode)\n }\n })\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const { code } = e\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(target, distance, '.el-cascader-node[tabindex=\"-1\"]')\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n '.el-cascader-node[aria-expanded=\"true\"]'\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n '.el-cascader-node[tabindex=\"-1\"]'\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n checkNode(target)\n break\n case EVENT_CODE.esc:\n case EVENT_CODE.tab:\n emit('close')\n break\n }\n }\n\n provide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n renderLabelFn,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n )\n\n watch([config, () => props.options], initStore, {\n deep: true,\n immediate: true,\n })\n\n watch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n }\n )\n\n watch(checkedValue, (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n })\n\n onBeforeUpdate(() => (menuList.value = []))\n\n onMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\n return {\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n getCheckedNodes,\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n }\n },\n})\n</script>\n"],"names":["ElCascaderMenu"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue_vue_type_script_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/index.vue"],"sourcesContent":["<template>\n <div\n :class=\"['el-cascader-panel', border && 'is-bordered']\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item)\"\n :index=\"index\"\n :nodes=\"menu\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport isEqual from 'lodash/isEqual'\nimport { isClient } from '@vueuse/core'\nimport { EVENT_CODE, focusNode, getSibling } from '@element-plus/utils/aria'\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@element-plus/utils/constants'\nimport scrollIntoView from '@element-plus/utils/scroll-into-view'\nimport {\n arrayFlat,\n coerceTruthyValueToArray,\n deduplicate,\n isEmpty,\n} from '@element-plus/utils/util'\n\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node, { ExpandTrigger } from './node'\nimport { CommonProps, useCascaderConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-plus/utils/types'\nimport type {\n CascaderValue,\n CascaderNodeValue,\n CascaderOption,\n RenderLabel,\n default as CascaderNode,\n} from './node'\n\nimport type { ElCascaderPanelContext } from './types'\n\nexport default defineComponent({\n name: 'ElCascaderPanel',\n\n components: {\n ElCascaderMenu,\n },\n\n props: {\n ...CommonProps,\n border: {\n type: Boolean,\n default: true,\n },\n renderLabel: Function as PropType<RenderLabel>,\n },\n\n emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, 'close', 'expand-change'],\n\n setup(props, { emit, slots }) {\n // for interrupt sync check status in lazy mode\n let manualChecked = false\n\n const config = useCascaderConfig(props)\n\n let store: Nullable<Store> = null\n const initialLoaded = ref(true)\n const menuList = ref<any[]>([])\n const checkedValue = ref<Nullable<CascaderValue>>(null)\n const menus = ref<CascaderNode[][]>([])\n const expandingNode = ref<Nullable<CascaderNode>>(null)\n const checkedNodes = ref<CascaderNode[]>([])\n\n const isHoverMenu = computed(\n () => config.value.expandTrigger === ExpandTrigger.HOVER\n )\n const renderLabelFn = computed(() => props.renderLabel || slots.default)\n\n const initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded.value = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded.value = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n }\n\n const lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n dataList && store?.appendNodes(dataList, parent as any)\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n cb && cb(dataList)\n }\n\n cfg.lazyLoad(node, resolve as any)\n }\n\n const expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: Nullable<CascaderNode>\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n }\n\n const handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n ) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && !checkStrictly && expandParentNode(node)\n }\n\n const expandParentNode = (node) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n }\n\n const getFlattedNodes = (leafOnly: boolean) => {\n return store?.getFlattedNodes(leafOnly)\n }\n\n const getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter((node) => node.checked !== false)\n }\n\n const clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n }\n\n const calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : values[0] ?? null\n }\n\n const syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded.value ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = deduplicate(\n arrayFlat(coerceTruthyValueToArray(modelValue))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple\n ? coerceTruthyValueToArray(modelValue)\n : [modelValue]\n const nodes = deduplicate(\n values.map((val) => store?.getNodeByValue(val, leafOnly))\n ) as Node[]\n syncMenuState(nodes, false)\n checkedValue.value = modelValue!\n }\n }\n\n const syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n ) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = null\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n newNodes.forEach((node) => node.doCheck(true))\n\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n }\n\n const scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n const container = menuElement.querySelector('.el-scrollbar__wrap')\n const activeNode =\n menuElement.querySelector('.el-cascader-node.is-active') ||\n menuElement.querySelector('.el-cascader-node.in-active-path')\n scrollIntoView(container, activeNode)\n }\n })\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const { code } = e\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(target, distance, '.el-cascader-node[tabindex=\"-1\"]')\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n '.el-cascader-node[aria-expanded=\"true\"]'\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n '.el-cascader-node[tabindex=\"-1\"]'\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n checkNode(target)\n break\n case EVENT_CODE.esc:\n case EVENT_CODE.tab:\n emit('close')\n break\n }\n }\n\n provide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n initialLoaded,\n renderLabelFn,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n )\n\n watch([config, () => props.options], initStore, {\n deep: true,\n immediate: true,\n })\n\n watch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n }\n )\n\n watch(checkedValue, (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n })\n\n onBeforeUpdate(() => (menuList.value = []))\n\n onMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\n return {\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n getCheckedNodes,\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n }\n },\n})\n</script>\n"],"names":["ElCascaderMenu"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue_vue_type_template_id_97c48f5c_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/index.vue?vue&type=template&id=97c48f5c&lang.js"],"sourcesContent":["<template>\n <div\n :class=\"['el-cascader-panel', border && 'is-bordered']\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item)\"\n :index=\"index\"\n :nodes=\"menu\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport isEqual from 'lodash/isEqual'\nimport { isClient } from '@vueuse/core'\nimport { EVENT_CODE, focusNode, getSibling } from '@element-plus/utils/aria'\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@element-plus/utils/constants'\nimport scrollIntoView from '@element-plus/utils/scroll-into-view'\nimport {\n arrayFlat,\n coerceTruthyValueToArray,\n deduplicate,\n isEmpty,\n} from '@element-plus/utils/util'\n\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node, { ExpandTrigger } from './node'\nimport { CommonProps, useCascaderConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-plus/utils/types'\nimport type {\n CascaderValue,\n CascaderNodeValue,\n CascaderOption,\n RenderLabel,\n default as CascaderNode,\n} from './node'\n\nimport type { ElCascaderPanelContext } from './types'\n\nexport default defineComponent({\n name: 'ElCascaderPanel',\n\n components: {\n ElCascaderMenu,\n },\n\n props: {\n ...CommonProps,\n border: {\n type: Boolean,\n default: true,\n },\n renderLabel: Function as PropType<RenderLabel>,\n },\n\n emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, 'close', 'expand-change'],\n\n setup(props, { emit, slots }) {\n let initialLoaded = true\n // for interrupt sync check status in lazy mode\n let manualChecked = false\n\n const config = useCascaderConfig(props)\n\n let store: Nullable<Store> = null\n const menuList = ref<any[]>([])\n const checkedValue = ref<Nullable<CascaderValue>>(null)\n const menus = ref<CascaderNode[][]>([])\n const expandingNode = ref<Nullable<CascaderNode>>(null)\n const checkedNodes = ref<CascaderNode[]>([])\n\n const isHoverMenu = computed(\n () => config.value.expandTrigger === ExpandTrigger.HOVER\n )\n const renderLabelFn = computed(() => props.renderLabel || slots.default)\n\n const initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n }\n\n const lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n dataList && store?.appendNodes(dataList, parent as any)\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n cb && cb(dataList)\n }\n\n cfg.lazyLoad(node, resolve as any)\n }\n\n const expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: Nullable<CascaderNode>\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n }\n\n const handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n ) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && !checkStrictly && expandParentNode(node)\n }\n\n const expandParentNode = (node) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n }\n\n const getFlattedNodes = (leafOnly: boolean) => {\n return store?.getFlattedNodes(leafOnly)\n }\n\n const getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter((node) => node.checked !== false)\n }\n\n const clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n }\n\n const calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : values[0] ?? null\n }\n\n const syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = deduplicate(\n arrayFlat(coerceTruthyValueToArray(modelValue))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple\n ? coerceTruthyValueToArray(modelValue)\n : [modelValue]\n const nodes = deduplicate(\n values.map((val) => store?.getNodeByValue(val, leafOnly))\n ) as Node[]\n syncMenuState(nodes, false)\n checkedValue.value = modelValue!\n }\n }\n\n const syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n ) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = null\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n newNodes.forEach((node) => node.doCheck(true))\n\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n }\n\n const scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n const container = menuElement.querySelector('.el-scrollbar__wrap')\n const activeNode =\n menuElement.querySelector('.el-cascader-node.is-active') ||\n menuElement.querySelector('.el-cascader-node.in-active-path')\n scrollIntoView(container, activeNode)\n }\n })\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const { code } = e\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(target, distance, '.el-cascader-node[tabindex=\"-1\"]')\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n '.el-cascader-node[aria-expanded=\"true\"]'\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n '.el-cascader-node[tabindex=\"-1\"]'\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n checkNode(target)\n break\n case EVENT_CODE.esc:\n case EVENT_CODE.tab:\n emit('close')\n break\n }\n }\n\n provide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n renderLabelFn,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n )\n\n watch([config, () => props.options], initStore, {\n deep: true,\n immediate: true,\n })\n\n watch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n }\n )\n\n watch(checkedValue, (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n })\n\n onBeforeUpdate(() => (menuList.value = []))\n\n onMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\n return {\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n getCheckedNodes,\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n }\n },\n})\n</script>\n"],"names":[],"mappings":";;;;;;wBACE;;;;;;QAMK,GAAG,EAAE,KAAK;;QACV;aACK,EAAE;QACP;;;;;;"}
1
+ {"version":3,"file":"index.vue_vue_type_template_id_97c48f5c_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/index.vue?vue&type=template&id=97c48f5c&lang.js"],"sourcesContent":["<template>\n <div\n :class=\"['el-cascader-panel', border && 'is-bordered']\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item)\"\n :index=\"index\"\n :nodes=\"menu\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport isEqual from 'lodash/isEqual'\nimport { isClient } from '@vueuse/core'\nimport { EVENT_CODE, focusNode, getSibling } from '@element-plus/utils/aria'\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '@element-plus/utils/constants'\nimport scrollIntoView from '@element-plus/utils/scroll-into-view'\nimport {\n arrayFlat,\n coerceTruthyValueToArray,\n deduplicate,\n isEmpty,\n} from '@element-plus/utils/util'\n\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node, { ExpandTrigger } from './node'\nimport { CommonProps, useCascaderConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-plus/utils/types'\nimport type {\n CascaderValue,\n CascaderNodeValue,\n CascaderOption,\n RenderLabel,\n default as CascaderNode,\n} from './node'\n\nimport type { ElCascaderPanelContext } from './types'\n\nexport default defineComponent({\n name: 'ElCascaderPanel',\n\n components: {\n ElCascaderMenu,\n },\n\n props: {\n ...CommonProps,\n border: {\n type: Boolean,\n default: true,\n },\n renderLabel: Function as PropType<RenderLabel>,\n },\n\n emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, 'close', 'expand-change'],\n\n setup(props, { emit, slots }) {\n // for interrupt sync check status in lazy mode\n let manualChecked = false\n\n const config = useCascaderConfig(props)\n\n let store: Nullable<Store> = null\n const initialLoaded = ref(true)\n const menuList = ref<any[]>([])\n const checkedValue = ref<Nullable<CascaderValue>>(null)\n const menus = ref<CascaderNode[][]>([])\n const expandingNode = ref<Nullable<CascaderNode>>(null)\n const checkedNodes = ref<CascaderNode[]>([])\n\n const isHoverMenu = computed(\n () => config.value.expandTrigger === ExpandTrigger.HOVER\n )\n const renderLabelFn = computed(() => props.renderLabel || slots.default)\n\n const initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded.value = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded.value = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n }\n\n const lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n dataList && store?.appendNodes(dataList, parent as any)\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n cb && cb(dataList)\n }\n\n cfg.lazyLoad(node, resolve as any)\n }\n\n const expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: Nullable<CascaderNode>\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n }\n\n const handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n ) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && !checkStrictly && expandParentNode(node)\n }\n\n const expandParentNode = (node) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n }\n\n const getFlattedNodes = (leafOnly: boolean) => {\n return store?.getFlattedNodes(leafOnly)\n }\n\n const getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter((node) => node.checked !== false)\n }\n\n const clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n }\n\n const calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : values[0] ?? null\n }\n\n const syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded.value ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = deduplicate(\n arrayFlat(coerceTruthyValueToArray(modelValue))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple\n ? coerceTruthyValueToArray(modelValue)\n : [modelValue]\n const nodes = deduplicate(\n values.map((val) => store?.getNodeByValue(val, leafOnly))\n ) as Node[]\n syncMenuState(nodes, false)\n checkedValue.value = modelValue!\n }\n }\n\n const syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n ) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = null\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n newNodes.forEach((node) => node.doCheck(true))\n\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n }\n\n const scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n const container = menuElement.querySelector('.el-scrollbar__wrap')\n const activeNode =\n menuElement.querySelector('.el-cascader-node.is-active') ||\n menuElement.querySelector('.el-cascader-node.in-active-path')\n scrollIntoView(container, activeNode)\n }\n })\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const { code } = e\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(target, distance, '.el-cascader-node[tabindex=\"-1\"]')\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n '.el-cascader-node[aria-expanded=\"true\"]'\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n '.el-cascader-node[tabindex=\"-1\"]'\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n checkNode(target)\n break\n case EVENT_CODE.esc:\n case EVENT_CODE.tab:\n emit('close')\n break\n }\n }\n\n provide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n initialLoaded,\n renderLabelFn,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n )\n\n watch([config, () => props.options], initStore, {\n deep: true,\n immediate: true,\n })\n\n watch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n }\n )\n\n watch(checkedValue, (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n })\n\n onBeforeUpdate(() => (menuList.value = []))\n\n onMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\n return {\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n getCheckedNodes,\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n }\n },\n})\n</script>\n"],"names":[],"mappings":";;;;;;wBACE;;;;;;QAMK,GAAG,EAAE,KAAK;;QACV;aACK,EAAE;QACP;;;;;;"}
@@ -13,6 +13,7 @@ declare const _default: import("vue").DefineComponent<{
13
13
  panel: import("./types").ElCascaderPanelContext;
14
14
  hoverZone: import("vue").Ref<SVGSVGElement | null>;
15
15
  isEmpty: import("vue").ComputedRef<boolean>;
16
+ isLoading: import("vue").ComputedRef<boolean>;
16
17
  menuId: import("vue").ComputedRef<string>;
17
18
  t: import("element-plus/es/hooks").Translator;
18
19
  handleExpand: (e: MouseEvent) => void;
@@ -2,6 +2,8 @@ import { defineComponent, getCurrentInstance, inject, ref, computed } from 'vue'
2
2
  import { ElScrollbar } from '../../scrollbar/index.mjs';
3
3
  import '../../../hooks/index.mjs';
4
4
  import { generateId } from '../../../utils/util.mjs';
5
+ import { Loading } from '@element-plus/icons-vue';
6
+ import { ElIcon } from '../../icon/index.mjs';
5
7
  import './node2.mjs';
6
8
  import { CASCADER_PANEL_INJECTION_KEY } from './types.mjs';
7
9
  import script$1 from './node.vue_vue_type_script_lang.mjs';
@@ -10,6 +12,8 @@ import { useLocale } from '../../../hooks/use-locale/index.mjs';
10
12
  var script = defineComponent({
11
13
  name: "ElCascaderMenu",
12
14
  components: {
15
+ Loading,
16
+ ElIcon,
13
17
  ElScrollbar,
14
18
  ElCascaderNode: script$1
15
19
  },
@@ -32,6 +36,7 @@ var script = defineComponent({
32
36
  const panel = inject(CASCADER_PANEL_INJECTION_KEY);
33
37
  const hoverZone = ref(null);
34
38
  const isEmpty = computed(() => !props.nodes.length);
39
+ const isLoading = computed(() => !panel.initialLoaded);
35
40
  const menuId = computed(() => `cascader-menu-${id}-${props.index}`);
36
41
  const handleExpand = (e) => {
37
42
  activeNode = e.target;
@@ -71,6 +76,7 @@ var script = defineComponent({
71
76
  panel,
72
77
  hoverZone,
73
78
  isEmpty,
79
+ isLoading,
74
80
  menuId,
75
81
  t,
76
82
  handleExpand,
@@ -1 +1 @@
1
- {"version":3,"file":"menu.vue_vue_type_script_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n <el-scrollbar\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n class=\"el-cascader-menu\"\n wrap-class=\"el-cascader-menu__wrap\"\n :view-class=\"['el-cascader-menu__list', isEmpty && 'is-empty']\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isEmpty\" class=\"el-cascader-menu__empty-text\">\n {{ t('el.cascader.noData') }}\n </div>\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n class=\"el-cascader-menu__hover-zone\"\n ></svg>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { useLocale } from '@element-plus/hooks'\nimport { generateId } from '@element-plus/utils/util'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\nimport type { default as CascaderNode } from './node'\n\nimport type { PropType } from 'vue'\nimport type { TimeoutHandle, Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n name: 'ElCascaderMenu',\n\n components: {\n ElScrollbar,\n ElCascaderNode,\n },\n\n props: {\n nodes: {\n type: Array as PropType<CascaderNode[]>,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n },\n\n setup(props) {\n const instance = getCurrentInstance()!\n const { t } = useLocale()\n const id = generateId()\n let activeNode: Nullable<HTMLElement> = null\n let hoverTimer: Nullable<TimeoutHandle> = null\n\n const panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\n const hoverZone = ref<null | SVGSVGElement>(null)\n\n const isEmpty = computed(() => !props.nodes.length)\n const menuId = computed(() => `cascader-menu-${id}-${props.index}`)\n\n const handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} 0 V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(\n clearHoverZone,\n panel.config.hoverThreshold\n )\n }\n }\n\n const clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = null\n }\n\n const clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n }\n\n return {\n panel,\n hoverZone,\n isEmpty,\n menuId,\n t,\n handleExpand,\n handleMouseMove,\n clearHoverZone,\n }\n },\n})\n</script>\n"],"names":["ElCascaderNode"],"mappings":";;;;;;;;;AAmCA,aAAe,eAAe,CAAC;AAC/B,EAAE,MAAM;;AAER,IAAI,WAAW;AACf,oBAAIA,QAAc;;AAElB,EAAE,KAAK,EAAE;IACL,KAAK,EAAE;;MAEL,QAAQ;KACT;IACD,KAAK,EAAE;;;KAGN;;OAEE,CAAC,KAAK,EAAE;UACL,QAAQ;IACd;IACA;QACI,UAAU;QACV,UAAU;IACd;;;IAGA,MAAM;IACN,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK;MAC1B,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK;MAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,cAAc,CAAC;;MAE1C,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;;QAEjC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;;QAE7B,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;;QAEhC,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU;QAC/B,SAAS,MAAM,CAAC,SAAS,GAAG,CAAC;;;QAG7B,EAAE;OACH,MAAM,IAAI,CAAC,YAAY;;OAEvB;;;UAGG,CAAC,UAAU;QACb;kBACU,CAAC,UAAU,CAAC,CAAC;gBACf,GAAG,IAAI,CAAC;;UAEd,cAAc,GAAG,MAAM;;QAEzB,OAAO;gBACC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;qBAChB,EAAE,CAAC;;WAEb;WACA;eACI;aACF;;MAEP;;;MAGA,cAAc;MACd;;;;;;"}
1
+ {"version":3,"file":"menu.vue_vue_type_script_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n <el-scrollbar\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n class=\"el-cascader-menu\"\n wrap-class=\"el-cascader-menu__wrap\"\n :view-class=\"['el-cascader-menu__list', isEmpty && 'is-empty']\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isLoading\" class=\"el-cascader-menu__empty-text\">\n <el-icon size=\"14\" class=\"is-loading\">\n <loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" class=\"el-cascader-menu__empty-text\">\n {{ t('el.cascader.noData') }}\n </div>\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n class=\"el-cascader-menu__hover-zone\"\n ></svg>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { useLocale } from '@element-plus/hooks'\nimport { generateId } from '@element-plus/utils/util'\nimport { Loading } from '@element-plus/icons-vue'\nimport ElIcon from '@element-plus/components/icon'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { default as CascaderNode } from './node'\nimport type { PropType } from 'vue'\nimport type { TimeoutHandle, Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n name: 'ElCascaderMenu',\n\n components: {\n Loading,\n ElIcon,\n ElScrollbar,\n ElCascaderNode,\n },\n\n props: {\n nodes: {\n type: Array as PropType<CascaderNode[]>,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n },\n\n setup(props) {\n const instance = getCurrentInstance()!\n const { t } = useLocale()\n const id = generateId()\n let activeNode: Nullable<HTMLElement> = null\n let hoverTimer: Nullable<TimeoutHandle> = null\n\n const panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\n const hoverZone = ref<null | SVGSVGElement>(null)\n\n const isEmpty = computed(() => !props.nodes.length)\n const isLoading = computed(() => !panel.initialLoaded)\n const menuId = computed(() => `cascader-menu-${id}-${props.index}`)\n\n const handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} 0 V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(\n clearHoverZone,\n panel.config.hoverThreshold\n )\n }\n }\n\n const clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = null\n }\n\n const clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n }\n return {\n panel,\n hoverZone,\n isEmpty,\n isLoading,\n menuId,\n t,\n handleExpand,\n handleMouseMove,\n clearHoverZone,\n }\n },\n})\n</script>\n"],"names":["ElCascaderNode"],"mappings":";;;;;;;;;;;AA2CA,aAAe,eAAe,CAAC;;AAE/B,EAAE,UAAU,EAAE;AACd,IAAI;AACJ,IAAI,MAAM;;AAEV,oBAAIA,QAAc;GACf;;IAEC,KAAK,EAAE;MACL,IAAI;MACJ;KACD;IACD,KAAK,EAAE;;;KAGN;;OAEE,CAAC,KAAK,EAAE;UACL,QAAQ;IACd;IACA;QACI,UAAU;QACV,UAAU;IACd;;;IAGA,MAAM;IACN,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,MAAM,YAAY,GAAG,CAAC,CAAC;MACrB,UAAU,GAAG,CAAC,CAAC;KAChB,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK;;QAE3B;;QAEA,eAAe,EAAE,CAAC;;QAElB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;;QAEhC,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU;QAC/B,SAAS,MAAM,CAAC,SAAS,GAAG,CAAC;;;QAG7B,EAAE;OACH,MAAM,IAAI,CAAC,YAAY;;OAEvB;;;UAGG,CAAC,UAAU;QACb;kBACU,CAAC,UAAU,CAAC,CAAC;gBACf,GAAG,IAAI,CAAC;;UAEd,cAAc,GAAG,MAAM;;QAEzB,OAAO;gBACC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;qBAChB,EAAE,CAAC;;WAEb;WACA;eACI;aACF;;MAEP;;;MAGA,eAAe;MACf,cAAc;MACd;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { resolveComponent, openBlock, createBlock, withCtx, createElementBlock, Fragment, renderList, toDisplayString, createCommentVNode } from 'vue';
1
+ import { resolveComponent, openBlock, createBlock, withCtx, createElementBlock, Fragment, renderList, createVNode, createTextVNode, toDisplayString, createCommentVNode } from 'vue';
2
2
 
3
3
  const _hoisted_1 = {
4
4
  key: 0,
@@ -6,11 +6,17 @@ const _hoisted_1 = {
6
6
  };
7
7
  const _hoisted_2 = {
8
8
  key: 1,
9
+ class: "el-cascader-menu__empty-text"
10
+ };
11
+ const _hoisted_3 = {
12
+ key: 2,
9
13
  ref: "hoverZone",
10
14
  class: "el-cascader-menu__hover-zone"
11
15
  };
12
16
  function render(_ctx, _cache, $props, $setup, $data, $options) {
13
17
  const _component_el_cascader_node = resolveComponent("el-cascader-node");
18
+ const _component_loading = resolveComponent("loading");
19
+ const _component_el_icon = resolveComponent("el-icon");
14
20
  const _component_el_scrollbar = resolveComponent("el-scrollbar");
15
21
  return openBlock(), createBlock(_component_el_scrollbar, {
16
22
  key: _ctx.menuId,
@@ -33,7 +39,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
33
39
  onExpand: _ctx.handleExpand
34
40
  }, null, 8, ["node", "menu-id", "onExpand"]);
35
41
  }), 128)),
36
- _ctx.isEmpty ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString(_ctx.t("el.cascader.noData")), 1)) : ((_a = _ctx.panel) == null ? void 0 : _a.isHoverMenu) ? (openBlock(), createElementBlock("svg", _hoisted_2, null, 512)) : createCommentVNode("v-if", true)
42
+ _ctx.isLoading ? (openBlock(), createElementBlock("div", _hoisted_1, [
43
+ createVNode(_component_el_icon, {
44
+ size: "14",
45
+ class: "is-loading"
46
+ }, {
47
+ default: withCtx(() => [
48
+ createVNode(_component_loading)
49
+ ]),
50
+ _: 1
51
+ }),
52
+ createTextVNode(" " + toDisplayString(_ctx.t("el.cascader.loading")), 1)
53
+ ])) : _ctx.isEmpty ? (openBlock(), createElementBlock("div", _hoisted_2, toDisplayString(_ctx.t("el.cascader.noData")), 1)) : ((_a = _ctx.panel) == null ? void 0 : _a.isHoverMenu) ? (openBlock(), createElementBlock("svg", _hoisted_3, null, 512)) : createCommentVNode("v-if", true)
37
54
  ];
38
55
  }),
39
56
  _: 1
@@ -1 +1 @@
1
- {"version":3,"file":"menu.vue_vue_type_template_id_9c79e4e2_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/menu.vue?vue&type=template&id=9c79e4e2&lang.js"],"sourcesContent":["<template>\n <el-scrollbar\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n class=\"el-cascader-menu\"\n wrap-class=\"el-cascader-menu__wrap\"\n :view-class=\"['el-cascader-menu__list', isEmpty && 'is-empty']\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isEmpty\" class=\"el-cascader-menu__empty-text\">\n {{ t('el.cascader.noData') }}\n </div>\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n class=\"el-cascader-menu__hover-zone\"\n ></svg>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { useLocale } from '@element-plus/hooks'\nimport { generateId } from '@element-plus/utils/util'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\nimport type { default as CascaderNode } from './node'\n\nimport type { PropType } from 'vue'\nimport type { TimeoutHandle, Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n name: 'ElCascaderMenu',\n\n components: {\n ElScrollbar,\n ElCascaderNode,\n },\n\n props: {\n nodes: {\n type: Array as PropType<CascaderNode[]>,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n },\n\n setup(props) {\n const instance = getCurrentInstance()!\n const { t } = useLocale()\n const id = generateId()\n let activeNode: Nullable<HTMLElement> = null\n let hoverTimer: Nullable<TimeoutHandle> = null\n\n const panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\n const hoverZone = ref<null | SVGSVGElement>(null)\n\n const isEmpty = computed(() => !props.nodes.length)\n const menuId = computed(() => `cascader-menu-${id}-${props.index}`)\n\n const handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} 0 V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(\n clearHoverZone,\n panel.config.hoverThreshold\n )\n }\n }\n\n const clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = null\n }\n\n const clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n }\n\n return {\n panel,\n hoverZone,\n isEmpty,\n menuId,\n t,\n handleExpand,\n handleMouseMove,\n clearHoverZone,\n }\n },\n})\n</script>\n"],"names":[],"mappings":";;;;;EAkBwB;;;;EAKlB,KAAI;EACJ;;;;;;;;IAtBD,KAAK;IACN;IACA;IACA;IACA,YAAU,EAAC;;IAEV;;;;;;;;;oBAQU;;;OAEA;;;sDAGX;;;;;"}
1
+ {"version":3,"file":"menu.vue_vue_type_template_id_9c79e4e2_lang.mjs","sources":["../../../../../../packages/components/cascader-panel/src/menu.vue?vue&type=template&id=9c79e4e2&lang.js"],"sourcesContent":["<template>\n <el-scrollbar\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n class=\"el-cascader-menu\"\n wrap-class=\"el-cascader-menu__wrap\"\n :view-class=\"['el-cascader-menu__list', isEmpty && 'is-empty']\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isLoading\" class=\"el-cascader-menu__empty-text\">\n <el-icon size=\"14\" class=\"is-loading\">\n <loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" class=\"el-cascader-menu__empty-text\">\n {{ t('el.cascader.noData') }}\n </div>\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n class=\"el-cascader-menu__hover-zone\"\n ></svg>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { useLocale } from '@element-plus/hooks'\nimport { generateId } from '@element-plus/utils/util'\nimport { Loading } from '@element-plus/icons-vue'\nimport ElIcon from '@element-plus/components/icon'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { default as CascaderNode } from './node'\nimport type { PropType } from 'vue'\nimport type { TimeoutHandle, Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n name: 'ElCascaderMenu',\n\n components: {\n Loading,\n ElIcon,\n ElScrollbar,\n ElCascaderNode,\n },\n\n props: {\n nodes: {\n type: Array as PropType<CascaderNode[]>,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n },\n\n setup(props) {\n const instance = getCurrentInstance()!\n const { t } = useLocale()\n const id = generateId()\n let activeNode: Nullable<HTMLElement> = null\n let hoverTimer: Nullable<TimeoutHandle> = null\n\n const panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\n const hoverZone = ref<null | SVGSVGElement>(null)\n\n const isEmpty = computed(() => !props.nodes.length)\n const isLoading = computed(() => !panel.initialLoaded)\n const menuId = computed(() => `cascader-menu-${id}-${props.index}`)\n\n const handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} 0 V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(\n clearHoverZone,\n panel.config.hoverThreshold\n )\n }\n }\n\n const clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = null\n }\n\n const clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n }\n return {\n panel,\n hoverZone,\n isEmpty,\n isLoading,\n menuId,\n t,\n handleExpand,\n handleMouseMove,\n clearHoverZone,\n }\n },\n})\n</script>\n"],"names":["_withCtx"],"mappings":";;;;;EAkB0B;;;;EAMG;;;;EAKvB,KAAI;EACJ;;;;;;;;;;IA5BD,KAAK;IACN;IACA;IACA;IACA,YAAU,EAAC;;IAEV;;;;;;;;;oBAQU;;;;;YAGT;;mBAAwB,EAACA;;;gBACvB;;;;;;;sDAIJ;;;;;"}
@@ -51,6 +51,7 @@ export interface ElCascaderPanelContext {
51
51
  expandingNode: Nullable<CascaderNode>;
52
52
  checkedNodes: CascaderNode[];
53
53
  isHoverMenu: boolean;
54
+ initialLoaded: boolean;
54
55
  renderLabelFn: RenderLabel;
55
56
  lazyLoad: (node?: CascaderNode, cb?: (dataList: CascaderOption[]) => void) => void;
56
57
  expandNode: (node: CascaderNode, silent?: boolean) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":["../../../../../../packages/components/cascader-panel/src/types.ts"],"sourcesContent":["import type { VNode, InjectionKey } from 'vue'\nimport type { Nullable } from '@element-plus/utils/types'\nimport type { default as CascaderNode } from './node'\n\nexport type { CascaderNode }\n\nexport type CascaderNodeValue = string | number\nexport type CascaderNodePathValue = CascaderNodeValue[]\nexport type CascaderValue =\n | CascaderNodeValue\n | CascaderNodePathValue\n | (CascaderNodeValue | CascaderNodePathValue)[]\nexport type CascaderConfig = Required<CascaderProps>\nexport type isDisabled = (data: CascaderOption, node: CascaderNode) => boolean\nexport type isLeaf = (data: CascaderOption, node: CascaderNode) => boolean\nexport type Resolve = (dataList?: CascaderOption[]) => void\nexport type LazyLoad = (node: CascaderNode, resolve: Resolve) => void\nexport type RenderLabel = ({\n node: CascaderNode,\n data: CascaderOption,\n}) => VNode | VNode[]\n\nexport enum ExpandTrigger {\n CLICK = 'click',\n HOVER = 'hover',\n}\n\nexport interface CascaderOption extends Record<string, unknown> {\n label?: string\n value?: CascaderNodeValue\n children?: CascaderOption[]\n disabled?: boolean\n leaf?: boolean\n}\n\nexport interface CascaderProps {\n expandTrigger?: ExpandTrigger\n multiple?: boolean\n checkStrictly?: boolean\n emitPath?: boolean\n lazy?: boolean\n lazyLoad?: LazyLoad\n value?: string\n label?: string\n children?: string\n disabled?: string | isDisabled\n leaf?: string | isLeaf\n hoverThreshold?: number\n}\n\nexport interface Tag {\n node?: CascaderNode\n key: number\n text: string\n hitState?: boolean\n closable: boolean\n}\n\nexport interface ElCascaderPanelContext {\n config: CascaderConfig\n expandingNode: Nullable<CascaderNode>\n checkedNodes: CascaderNode[]\n isHoverMenu: boolean\n renderLabelFn: RenderLabel\n lazyLoad: (\n node?: CascaderNode,\n cb?: (dataList: CascaderOption[]) => void\n ) => void\n expandNode: (node: CascaderNode, silent?: boolean) => void\n handleCheckChange: (\n node: CascaderNode,\n checked: boolean,\n emitClose?: boolean\n ) => void\n}\n\nexport const CASCADER_PANEL_INJECTION_KEY: InjectionKey<ElCascaderPanelContext> =\n Symbol()\n"],"names":[],"mappings":"AAAU,IAAC,aAAa,mBAAmB,CAAC,CAAC,cAAc,KAAK;AAChE,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AACpC,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AACpC,EAAE,OAAO,cAAc,CAAC;AACxB,CAAC,EAAE,aAAa,IAAI,EAAE,EAAE;AACZ,MAAC,4BAA4B,GAAG,MAAM;;;;"}
1
+ {"version":3,"file":"types.mjs","sources":["../../../../../../packages/components/cascader-panel/src/types.ts"],"sourcesContent":["import type { VNode, InjectionKey } from 'vue'\nimport type { Nullable } from '@element-plus/utils/types'\nimport type { default as CascaderNode } from './node'\n\nexport type { CascaderNode }\n\nexport type CascaderNodeValue = string | number\nexport type CascaderNodePathValue = CascaderNodeValue[]\nexport type CascaderValue =\n | CascaderNodeValue\n | CascaderNodePathValue\n | (CascaderNodeValue | CascaderNodePathValue)[]\nexport type CascaderConfig = Required<CascaderProps>\nexport type isDisabled = (data: CascaderOption, node: CascaderNode) => boolean\nexport type isLeaf = (data: CascaderOption, node: CascaderNode) => boolean\nexport type Resolve = (dataList?: CascaderOption[]) => void\nexport type LazyLoad = (node: CascaderNode, resolve: Resolve) => void\nexport type RenderLabel = ({\n node: CascaderNode,\n data: CascaderOption,\n}) => VNode | VNode[]\n\nexport enum ExpandTrigger {\n CLICK = 'click',\n HOVER = 'hover',\n}\n\nexport interface CascaderOption extends Record<string, unknown> {\n label?: string\n value?: CascaderNodeValue\n children?: CascaderOption[]\n disabled?: boolean\n leaf?: boolean\n}\n\nexport interface CascaderProps {\n expandTrigger?: ExpandTrigger\n multiple?: boolean\n checkStrictly?: boolean\n emitPath?: boolean\n lazy?: boolean\n lazyLoad?: LazyLoad\n value?: string\n label?: string\n children?: string\n disabled?: string | isDisabled\n leaf?: string | isLeaf\n hoverThreshold?: number\n}\n\nexport interface Tag {\n node?: CascaderNode\n key: number\n text: string\n hitState?: boolean\n closable: boolean\n}\n\nexport interface ElCascaderPanelContext {\n config: CascaderConfig\n expandingNode: Nullable<CascaderNode>\n checkedNodes: CascaderNode[]\n isHoverMenu: boolean\n initialLoaded: boolean\n renderLabelFn: RenderLabel\n lazyLoad: (\n node?: CascaderNode,\n cb?: (dataList: CascaderOption[]) => void\n ) => void\n expandNode: (node: CascaderNode, silent?: boolean) => void\n handleCheckChange: (\n node: CascaderNode,\n checked: boolean,\n emitClose?: boolean\n ) => void\n}\n\nexport const CASCADER_PANEL_INJECTION_KEY: InjectionKey<ElCascaderPanelContext> =\n Symbol()\n"],"names":[],"mappings":"AAAU,IAAC,aAAa,mBAAmB,CAAC,CAAC,cAAc,KAAK;AAChE,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AACpC,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AACpC,EAAE,OAAO,cAAc,CAAC;AACxB,CAAC,EAAE,aAAa,IAAI,EAAE,EAAE;AACZ,MAAC,4BAA4B,GAAG,MAAM;;;;"}
@@ -64,9 +64,9 @@ export declare const ElCheckbox: import("../../utils/types").SFCWithInstall<impo
64
64
  checked: boolean;
65
65
  } & {
66
66
  size?: import("../../utils/types").ComponentSize | undefined;
67
- name?: string | undefined;
68
67
  modelValue?: string | number | boolean | undefined;
69
68
  label?: string | number | boolean | Record<string, any> | undefined;
69
+ name?: string | undefined;
70
70
  id?: string | undefined;
71
71
  tabindex?: string | number | undefined;
72
72
  trueLabel?: string | number | undefined;
@@ -77,8 +77,8 @@ export declare const ElCheckbox: import("../../utils/types").SFCWithInstall<impo
77
77
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
78
78
  }, {
79
79
  disabled: boolean;
80
- name: string;
81
80
  modelValue: string | number | boolean;
81
+ name: string;
82
82
  border: boolean;
83
83
  id: string;
84
84
  indeterminate: boolean;
@@ -142,9 +142,9 @@ export declare const ElCheckbox: import("../../utils/types").SFCWithInstall<impo
142
142
  checked: boolean;
143
143
  } & {
144
144
  size?: string | undefined;
145
- name?: string | undefined;
146
145
  modelValue?: string | number | boolean | undefined;
147
146
  label?: string | number | boolean | Record<string, any> | undefined;
147
+ name?: string | undefined;
148
148
  tabindex?: string | number | undefined;
149
149
  trueLabel?: string | number | undefined;
150
150
  falseLabel?: string | number | undefined;
@@ -153,8 +153,8 @@ export declare const ElCheckbox: import("../../utils/types").SFCWithInstall<impo
153
153
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
154
154
  }, {
155
155
  disabled: boolean;
156
- name: string;
157
156
  modelValue: string | number | boolean;
157
+ name: string;
158
158
  indeterminate: boolean;
159
159
  checked: boolean;
160
160
  trueLabel: string | number;
@@ -280,9 +280,9 @@ export declare const ElCheckboxButton: import("../../utils/types").SFCWithInstal
280
280
  checked: boolean;
281
281
  } & {
282
282
  size?: string | undefined;
283
- name?: string | undefined;
284
283
  modelValue?: string | number | boolean | undefined;
285
284
  label?: string | number | boolean | Record<string, any> | undefined;
285
+ name?: string | undefined;
286
286
  tabindex?: string | number | undefined;
287
287
  trueLabel?: string | number | undefined;
288
288
  falseLabel?: string | number | undefined;
@@ -291,8 +291,8 @@ export declare const ElCheckboxButton: import("../../utils/types").SFCWithInstal
291
291
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
292
292
  }, {
293
293
  disabled: boolean;
294
- name: string;
295
294
  modelValue: string | number | boolean;
295
+ name: string;
296
296
  indeterminate: boolean;
297
297
  checked: boolean;
298
298
  trueLabel: string | number;