@element-plus/nightly 0.0.20260414 → 0.0.20260415

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 (660) hide show
  1. package/attributes.json +1 -1
  2. package/dist/index.css +1 -1
  3. package/dist/index.full.js +446 -483
  4. package/dist/index.full.min.js +8 -8
  5. package/dist/index.full.min.js.map +1 -1
  6. package/dist/index.full.min.mjs +8 -8
  7. package/dist/index.full.min.mjs.map +1 -1
  8. package/dist/index.full.mjs +446 -483
  9. package/dist/locale/af.js +1 -1
  10. package/dist/locale/af.min.js +1 -1
  11. package/dist/locale/af.min.mjs +1 -1
  12. package/dist/locale/af.mjs +1 -1
  13. package/dist/locale/ar-eg.js +1 -1
  14. package/dist/locale/ar-eg.min.js +1 -1
  15. package/dist/locale/ar-eg.min.mjs +1 -1
  16. package/dist/locale/ar-eg.mjs +1 -1
  17. package/dist/locale/ar.js +1 -1
  18. package/dist/locale/ar.min.js +1 -1
  19. package/dist/locale/ar.min.mjs +1 -1
  20. package/dist/locale/ar.mjs +1 -1
  21. package/dist/locale/az.js +1 -1
  22. package/dist/locale/az.min.js +1 -1
  23. package/dist/locale/az.min.mjs +1 -1
  24. package/dist/locale/az.mjs +1 -1
  25. package/dist/locale/bg.js +1 -1
  26. package/dist/locale/bg.min.js +1 -1
  27. package/dist/locale/bg.min.mjs +1 -1
  28. package/dist/locale/bg.mjs +1 -1
  29. package/dist/locale/bn.js +1 -1
  30. package/dist/locale/bn.min.js +1 -1
  31. package/dist/locale/bn.min.mjs +1 -1
  32. package/dist/locale/bn.mjs +1 -1
  33. package/dist/locale/ca.js +1 -1
  34. package/dist/locale/ca.min.js +1 -1
  35. package/dist/locale/ca.min.mjs +1 -1
  36. package/dist/locale/ca.mjs +1 -1
  37. package/dist/locale/ckb.js +1 -1
  38. package/dist/locale/ckb.min.js +1 -1
  39. package/dist/locale/ckb.min.mjs +1 -1
  40. package/dist/locale/ckb.mjs +1 -1
  41. package/dist/locale/cs.js +1 -1
  42. package/dist/locale/cs.min.js +1 -1
  43. package/dist/locale/cs.min.mjs +1 -1
  44. package/dist/locale/cs.mjs +1 -1
  45. package/dist/locale/da.js +1 -1
  46. package/dist/locale/da.min.js +1 -1
  47. package/dist/locale/da.min.mjs +1 -1
  48. package/dist/locale/da.mjs +1 -1
  49. package/dist/locale/de.js +1 -1
  50. package/dist/locale/de.min.js +1 -1
  51. package/dist/locale/de.min.mjs +1 -1
  52. package/dist/locale/de.mjs +1 -1
  53. package/dist/locale/el.js +1 -1
  54. package/dist/locale/el.min.js +1 -1
  55. package/dist/locale/el.min.mjs +1 -1
  56. package/dist/locale/el.mjs +1 -1
  57. package/dist/locale/en.js +1 -1
  58. package/dist/locale/en.min.js +1 -1
  59. package/dist/locale/en.min.mjs +1 -1
  60. package/dist/locale/en.mjs +1 -1
  61. package/dist/locale/eo.js +1 -1
  62. package/dist/locale/eo.min.js +1 -1
  63. package/dist/locale/eo.min.mjs +1 -1
  64. package/dist/locale/eo.mjs +1 -1
  65. package/dist/locale/es.js +1 -1
  66. package/dist/locale/es.min.js +1 -1
  67. package/dist/locale/es.min.mjs +1 -1
  68. package/dist/locale/es.mjs +1 -1
  69. package/dist/locale/et.js +1 -1
  70. package/dist/locale/et.min.js +1 -1
  71. package/dist/locale/et.min.mjs +1 -1
  72. package/dist/locale/et.mjs +1 -1
  73. package/dist/locale/eu.js +1 -1
  74. package/dist/locale/eu.min.js +1 -1
  75. package/dist/locale/eu.min.mjs +1 -1
  76. package/dist/locale/eu.mjs +1 -1
  77. package/dist/locale/fa.js +1 -1
  78. package/dist/locale/fa.min.js +1 -1
  79. package/dist/locale/fa.min.mjs +1 -1
  80. package/dist/locale/fa.mjs +1 -1
  81. package/dist/locale/fi.js +1 -1
  82. package/dist/locale/fi.min.js +1 -1
  83. package/dist/locale/fi.min.mjs +1 -1
  84. package/dist/locale/fi.mjs +1 -1
  85. package/dist/locale/fr.js +1 -1
  86. package/dist/locale/fr.min.js +1 -1
  87. package/dist/locale/fr.min.mjs +1 -1
  88. package/dist/locale/fr.mjs +1 -1
  89. package/dist/locale/he.js +1 -1
  90. package/dist/locale/he.min.js +1 -1
  91. package/dist/locale/he.min.mjs +1 -1
  92. package/dist/locale/he.mjs +1 -1
  93. package/dist/locale/hi.js +1 -1
  94. package/dist/locale/hi.min.js +1 -1
  95. package/dist/locale/hi.min.mjs +1 -1
  96. package/dist/locale/hi.mjs +1 -1
  97. package/dist/locale/hr.js +1 -1
  98. package/dist/locale/hr.min.js +1 -1
  99. package/dist/locale/hr.min.mjs +1 -1
  100. package/dist/locale/hr.mjs +1 -1
  101. package/dist/locale/hu.js +1 -1
  102. package/dist/locale/hu.min.js +1 -1
  103. package/dist/locale/hu.min.mjs +1 -1
  104. package/dist/locale/hu.mjs +1 -1
  105. package/dist/locale/hy-am.js +1 -1
  106. package/dist/locale/hy-am.min.js +1 -1
  107. package/dist/locale/hy-am.min.mjs +1 -1
  108. package/dist/locale/hy-am.mjs +1 -1
  109. package/dist/locale/id.js +1 -1
  110. package/dist/locale/id.min.js +1 -1
  111. package/dist/locale/id.min.mjs +1 -1
  112. package/dist/locale/id.mjs +1 -1
  113. package/dist/locale/it.js +1 -1
  114. package/dist/locale/it.min.js +1 -1
  115. package/dist/locale/it.min.mjs +1 -1
  116. package/dist/locale/it.mjs +1 -1
  117. package/dist/locale/ja.js +1 -1
  118. package/dist/locale/ja.min.js +1 -1
  119. package/dist/locale/ja.min.mjs +1 -1
  120. package/dist/locale/ja.mjs +1 -1
  121. package/dist/locale/kk.js +1 -1
  122. package/dist/locale/kk.min.js +1 -1
  123. package/dist/locale/kk.min.mjs +1 -1
  124. package/dist/locale/kk.mjs +1 -1
  125. package/dist/locale/km.js +1 -1
  126. package/dist/locale/km.min.js +1 -1
  127. package/dist/locale/km.min.mjs +1 -1
  128. package/dist/locale/km.mjs +1 -1
  129. package/dist/locale/ko.js +1 -1
  130. package/dist/locale/ko.min.js +1 -1
  131. package/dist/locale/ko.min.mjs +1 -1
  132. package/dist/locale/ko.mjs +1 -1
  133. package/dist/locale/ku.js +1 -1
  134. package/dist/locale/ku.min.js +1 -1
  135. package/dist/locale/ku.min.mjs +1 -1
  136. package/dist/locale/ku.mjs +1 -1
  137. package/dist/locale/ky.js +1 -1
  138. package/dist/locale/ky.min.js +1 -1
  139. package/dist/locale/ky.min.mjs +1 -1
  140. package/dist/locale/ky.mjs +1 -1
  141. package/dist/locale/lo.js +1 -1
  142. package/dist/locale/lo.min.js +1 -1
  143. package/dist/locale/lo.min.mjs +1 -1
  144. package/dist/locale/lo.mjs +1 -1
  145. package/dist/locale/lt.js +1 -1
  146. package/dist/locale/lt.min.js +1 -1
  147. package/dist/locale/lt.min.mjs +1 -1
  148. package/dist/locale/lt.mjs +1 -1
  149. package/dist/locale/lv.js +1 -1
  150. package/dist/locale/lv.min.js +1 -1
  151. package/dist/locale/lv.min.mjs +1 -1
  152. package/dist/locale/lv.mjs +1 -1
  153. package/dist/locale/mg.js +1 -1
  154. package/dist/locale/mg.min.js +1 -1
  155. package/dist/locale/mg.min.mjs +1 -1
  156. package/dist/locale/mg.mjs +1 -1
  157. package/dist/locale/mn.js +1 -1
  158. package/dist/locale/mn.min.js +1 -1
  159. package/dist/locale/mn.min.mjs +1 -1
  160. package/dist/locale/mn.mjs +1 -1
  161. package/dist/locale/ms.js +1 -1
  162. package/dist/locale/ms.min.js +1 -1
  163. package/dist/locale/ms.min.mjs +1 -1
  164. package/dist/locale/ms.mjs +1 -1
  165. package/dist/locale/my.js +1 -1
  166. package/dist/locale/my.min.js +1 -1
  167. package/dist/locale/my.min.mjs +1 -1
  168. package/dist/locale/my.mjs +1 -1
  169. package/dist/locale/nb-no.js +1 -1
  170. package/dist/locale/nb-no.min.js +1 -1
  171. package/dist/locale/nb-no.min.mjs +1 -1
  172. package/dist/locale/nb-no.mjs +1 -1
  173. package/dist/locale/nl.js +1 -1
  174. package/dist/locale/nl.min.js +1 -1
  175. package/dist/locale/nl.min.mjs +1 -1
  176. package/dist/locale/nl.mjs +1 -1
  177. package/dist/locale/no.js +1 -1
  178. package/dist/locale/no.min.js +1 -1
  179. package/dist/locale/no.min.mjs +1 -1
  180. package/dist/locale/no.mjs +1 -1
  181. package/dist/locale/pa.js +1 -1
  182. package/dist/locale/pa.min.js +1 -1
  183. package/dist/locale/pa.min.mjs +1 -1
  184. package/dist/locale/pa.mjs +1 -1
  185. package/dist/locale/pl.js +1 -1
  186. package/dist/locale/pl.min.js +1 -1
  187. package/dist/locale/pl.min.mjs +1 -1
  188. package/dist/locale/pl.mjs +1 -1
  189. package/dist/locale/pt-br.js +1 -1
  190. package/dist/locale/pt-br.min.js +1 -1
  191. package/dist/locale/pt-br.min.mjs +1 -1
  192. package/dist/locale/pt-br.mjs +1 -1
  193. package/dist/locale/pt.js +1 -1
  194. package/dist/locale/pt.min.js +1 -1
  195. package/dist/locale/pt.min.mjs +1 -1
  196. package/dist/locale/pt.mjs +1 -1
  197. package/dist/locale/ro.js +1 -1
  198. package/dist/locale/ro.min.js +1 -1
  199. package/dist/locale/ro.min.mjs +1 -1
  200. package/dist/locale/ro.mjs +1 -1
  201. package/dist/locale/ru.js +1 -1
  202. package/dist/locale/ru.min.js +1 -1
  203. package/dist/locale/ru.min.mjs +1 -1
  204. package/dist/locale/ru.mjs +1 -1
  205. package/dist/locale/sk.js +1 -1
  206. package/dist/locale/sk.min.js +1 -1
  207. package/dist/locale/sk.min.mjs +1 -1
  208. package/dist/locale/sk.mjs +1 -1
  209. package/dist/locale/sl.js +1 -1
  210. package/dist/locale/sl.min.js +1 -1
  211. package/dist/locale/sl.min.mjs +1 -1
  212. package/dist/locale/sl.mjs +1 -1
  213. package/dist/locale/sr.js +1 -1
  214. package/dist/locale/sr.min.js +1 -1
  215. package/dist/locale/sr.min.mjs +1 -1
  216. package/dist/locale/sr.mjs +1 -1
  217. package/dist/locale/sv.js +1 -1
  218. package/dist/locale/sv.min.js +1 -1
  219. package/dist/locale/sv.min.mjs +1 -1
  220. package/dist/locale/sv.mjs +1 -1
  221. package/dist/locale/sw.js +1 -1
  222. package/dist/locale/sw.min.js +1 -1
  223. package/dist/locale/sw.min.mjs +1 -1
  224. package/dist/locale/sw.mjs +1 -1
  225. package/dist/locale/ta.js +1 -1
  226. package/dist/locale/ta.min.js +1 -1
  227. package/dist/locale/ta.min.mjs +1 -1
  228. package/dist/locale/ta.mjs +1 -1
  229. package/dist/locale/te.js +1 -1
  230. package/dist/locale/te.min.js +1 -1
  231. package/dist/locale/te.min.mjs +1 -1
  232. package/dist/locale/te.mjs +1 -1
  233. package/dist/locale/th.js +1 -1
  234. package/dist/locale/th.min.js +1 -1
  235. package/dist/locale/th.min.mjs +1 -1
  236. package/dist/locale/th.mjs +1 -1
  237. package/dist/locale/tk.js +1 -1
  238. package/dist/locale/tk.min.js +1 -1
  239. package/dist/locale/tk.min.mjs +1 -1
  240. package/dist/locale/tk.mjs +1 -1
  241. package/dist/locale/tr.js +1 -1
  242. package/dist/locale/tr.min.js +1 -1
  243. package/dist/locale/tr.min.mjs +1 -1
  244. package/dist/locale/tr.mjs +1 -1
  245. package/dist/locale/ug-cn.js +1 -1
  246. package/dist/locale/ug-cn.min.js +1 -1
  247. package/dist/locale/ug-cn.min.mjs +1 -1
  248. package/dist/locale/ug-cn.mjs +1 -1
  249. package/dist/locale/uk.js +1 -1
  250. package/dist/locale/uk.min.js +1 -1
  251. package/dist/locale/uk.min.mjs +1 -1
  252. package/dist/locale/uk.mjs +1 -1
  253. package/dist/locale/uz-uz.js +1 -1
  254. package/dist/locale/uz-uz.min.js +1 -1
  255. package/dist/locale/uz-uz.min.mjs +1 -1
  256. package/dist/locale/uz-uz.mjs +1 -1
  257. package/dist/locale/vi.js +1 -1
  258. package/dist/locale/vi.min.js +1 -1
  259. package/dist/locale/vi.min.mjs +1 -1
  260. package/dist/locale/vi.mjs +1 -1
  261. package/dist/locale/zh-cn.js +1 -1
  262. package/dist/locale/zh-cn.min.js +1 -1
  263. package/dist/locale/zh-cn.min.mjs +1 -1
  264. package/dist/locale/zh-cn.mjs +1 -1
  265. package/dist/locale/zh-hk.js +1 -1
  266. package/dist/locale/zh-hk.min.js +1 -1
  267. package/dist/locale/zh-hk.min.mjs +1 -1
  268. package/dist/locale/zh-hk.mjs +1 -1
  269. package/dist/locale/zh-mo.js +1 -1
  270. package/dist/locale/zh-mo.min.js +1 -1
  271. package/dist/locale/zh-mo.min.mjs +1 -1
  272. package/dist/locale/zh-mo.mjs +1 -1
  273. package/dist/locale/zh-tw.js +1 -1
  274. package/dist/locale/zh-tw.min.js +1 -1
  275. package/dist/locale/zh-tw.min.mjs +1 -1
  276. package/dist/locale/zh-tw.mjs +1 -1
  277. package/es/components/affix/src/affix.d.ts +3 -3
  278. package/es/components/affix/src/affix.mjs +1 -2
  279. package/es/components/affix/src/affix.mjs.map +1 -1
  280. package/es/components/affix/src/affix.vue.d.ts +3 -3
  281. package/es/components/affix/src/affix.vue_vue_type_script_setup_true_lang.mjs +6 -10
  282. package/es/components/affix/src/affix.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  283. package/es/components/affix/src/affix2.mjs.map +1 -1
  284. package/es/components/alert/src/alert.d.ts +2 -2
  285. package/es/components/alert/src/alert.vue.d.ts +1 -1
  286. package/es/components/anchor/src/anchor.d.ts +2 -2
  287. package/es/components/anchor/src/anchor.vue.d.ts +4 -4
  288. package/es/components/autocomplete/src/autocomplete.d.ts +4 -4
  289. package/es/components/autocomplete/src/autocomplete.vue.d.ts +5 -5
  290. package/es/components/avatar/src/avatar.d.ts +1 -1
  291. package/es/components/backtop/src/backtop.vue.d.ts +2 -2
  292. package/es/components/badge/src/badge.d.ts +1 -1
  293. package/es/components/badge/src/badge.vue.d.ts +1 -1
  294. package/es/components/button/src/button-group.vue.d.ts +1 -1
  295. package/es/components/button/src/button.d.ts +2 -2
  296. package/es/components/button/src/button.vue.d.ts +2 -2
  297. package/es/components/calendar/src/calendar.vue.d.ts +1 -1
  298. package/es/components/carousel/src/carousel.d.ts +2 -2
  299. package/es/components/carousel/src/carousel.vue.d.ts +1 -1
  300. package/es/components/cascader/src/cascader.d.ts +3 -3
  301. package/es/components/cascader/src/cascader.vue.d.ts +12 -12
  302. package/es/components/cascader-panel/src/index.vue.d.ts +3 -3
  303. package/es/components/check-tag/src/check-tag.d.ts +1 -1
  304. package/es/components/checkbox/src/checkbox-button.vue.d.ts +2 -2
  305. package/es/components/checkbox/src/checkbox-group.vue.d.ts +5 -5
  306. package/es/components/checkbox/src/checkbox.vue.d.ts +2 -2
  307. package/es/components/col/src/col.vue.d.ts +1 -1
  308. package/es/components/collapse/src/collapse-item.vue.d.ts +1 -1
  309. package/es/components/collapse/src/collapse.vue.d.ts +2 -2
  310. package/es/components/color-picker/src/color-picker.d.ts +1 -1
  311. package/es/components/color-picker/src/color-picker.vue.d.ts +7 -7
  312. package/es/components/config-provider/src/hooks/use-global-config.d.ts +1 -1
  313. package/es/components/countdown/src/countdown.vue.d.ts +1 -1
  314. package/es/components/date-picker/src/date-picker.d.ts +4 -4
  315. package/es/components/date-picker/src/props.d.ts +1 -1
  316. package/es/components/date-picker-panel/src/date-picker-panel.d.ts +1 -1
  317. package/es/components/descriptions/src/description.d.ts +1 -1
  318. package/es/components/descriptions/src/description.vue.d.ts +1 -1
  319. package/es/components/dialog/src/dialog.d.ts +1 -1
  320. package/es/components/dialog/src/dialog.mjs +1 -2
  321. package/es/components/dialog/src/dialog.mjs.map +1 -1
  322. package/es/components/dialog/src/dialog.vue.d.ts +3 -3
  323. package/es/components/dialog/src/dialog.vue_vue_type_script_setup_true_lang.mjs +91 -95
  324. package/es/components/dialog/src/dialog.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  325. package/es/components/dialog/src/dialog2.mjs.map +1 -1
  326. package/es/components/divider/src/divider.d.ts +1 -1
  327. package/es/components/divider/src/divider.vue.d.ts +1 -1
  328. package/es/components/drawer/src/drawer.d.ts +1 -1
  329. package/es/components/drawer/src/drawer.vue.d.ts +7 -7
  330. package/es/components/drawer/src/drawer.vue_vue_type_script_setup_true_lang.mjs +110 -114
  331. package/es/components/drawer/src/drawer.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  332. package/es/components/drawer/src/drawer2.mjs.map +1 -1
  333. package/es/components/dropdown/src/dropdown-item.vue.d.ts +3 -3
  334. package/es/components/dropdown/src/dropdown.d.ts +4 -4
  335. package/es/components/dropdown/src/dropdown.vue.d.ts +37 -37
  336. package/es/components/focus-trap/src/focus-trap.vue.d.ts +1 -1
  337. package/es/components/form/src/form-item.d.ts +1 -1
  338. package/es/components/form/src/form.d.ts +1 -1
  339. package/es/components/image/src/image.d.ts +1 -1
  340. package/es/components/image/src/image.vue.d.ts +2 -2
  341. package/es/components/image-viewer/src/image-viewer.vue.d.ts +10 -10
  342. package/es/components/image-viewer/src/image-viewer.vue_vue_type_script_setup_true_lang.mjs +103 -107
  343. package/es/components/image-viewer/src/image-viewer.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  344. package/es/components/image-viewer/src/image-viewer2.mjs.map +1 -1
  345. package/es/components/input/src/input.d.ts +2 -2
  346. package/es/components/input/src/input.vue.d.ts +21 -21
  347. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs +17 -11
  348. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  349. package/es/components/input/src/input2.mjs.map +1 -1
  350. package/es/components/input-number/src/input-number.d.ts +21 -1
  351. package/es/components/input-number/src/input-number.mjs +2 -0
  352. package/es/components/input-number/src/input-number.mjs.map +1 -1
  353. package/es/components/input-number/src/input-number.vue.d.ts +8 -8
  354. package/es/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.mjs +12 -6
  355. package/es/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  356. package/es/components/input-number/src/input-number2.mjs.map +1 -1
  357. package/es/components/input-otp/src/input-otp.vue.d.ts +8 -8
  358. package/es/components/input-tag/src/input-tag.d.ts +2 -2
  359. package/es/components/input-tag/src/input-tag.vue.d.ts +11 -11
  360. package/es/components/link/src/link.d.ts +1 -1
  361. package/es/components/link/src/link.vue.d.ts +1 -1
  362. package/es/components/mention/src/mention.d.ts +3 -3
  363. package/es/components/mention/src/mention.vue.d.ts +6 -6
  364. package/es/components/menu/src/menu.d.ts +9 -9
  365. package/es/components/menu/src/sub-menu.d.ts +1 -1
  366. package/es/components/message/src/message.d.ts +2 -2
  367. package/es/components/message/src/message.vue.d.ts +5 -5
  368. package/es/components/notification/src/notification.d.ts +1 -1
  369. package/es/components/notification/src/notification.vue.d.ts +4 -4
  370. package/es/components/pagination/src/pagination.d.ts +1 -1
  371. package/es/components/popconfirm/src/popconfirm.d.ts +2 -2
  372. package/es/components/popconfirm/src/popconfirm.vue.d.ts +4 -4
  373. package/es/components/popover/src/popover.d.ts +3 -3
  374. package/es/components/popover/src/popover.vue.d.ts +3 -3
  375. package/es/components/popper/src/composables/use-content.d.ts +2 -2
  376. package/es/components/popper/src/composables/use-focus-trap.d.ts +1 -1
  377. package/es/components/popper/src/content.vue.d.ts +8 -8
  378. package/es/components/progress/src/progress.vue.d.ts +1 -1
  379. package/es/components/radio/src/radio-group.vue.d.ts +5 -5
  380. package/es/components/radio/src/radio.vue.d.ts +2 -2
  381. package/es/components/rate/src/rate.vue.d.ts +2 -2
  382. package/es/components/result/src/result.d.ts +1 -1
  383. package/es/components/result/src/result.vue.d.ts +1 -1
  384. package/es/components/roving-focus-group/src/roving-focus-group.d.ts +1 -1
  385. package/es/components/roving-focus-group/src/roving-focus-group.vue.d.ts +2 -2
  386. package/es/components/row/src/row.d.ts +2 -2
  387. package/es/components/segmented/index.d.ts +3 -3
  388. package/es/components/segmented/src/segmented.d.ts +1 -1
  389. package/es/components/segmented/src/segmented.vue.d.ts +2 -2
  390. package/es/components/select/src/select.d.ts +4 -4
  391. package/es/components/select/src/select.vue.d.ts +41 -41
  392. package/es/components/select-v2/src/defaults.d.ts +4 -4
  393. package/es/components/select-v2/src/select.vue.d.ts +40 -40
  394. package/es/components/slider/src/button.vue.d.ts +1 -1
  395. package/es/components/slider/src/slider.vue.d.ts +4 -4
  396. package/es/components/space/src/space.d.ts +4 -4
  397. package/es/components/splitter/src/splitter.d.ts +1 -1
  398. package/es/components/statistic/src/statistic.vue.d.ts +2 -2
  399. package/es/components/steps/src/item.d.ts +1 -1
  400. package/es/components/steps/src/item.vue.d.ts +1 -1
  401. package/es/components/steps/src/steps.d.ts +3 -3
  402. package/es/components/steps/src/steps.vue.d.ts +1 -1
  403. package/es/components/switch/src/switch.vue.d.ts +3 -3
  404. package/es/components/table/src/table-column/index.d.ts +8 -8
  405. package/es/components/table/src/table-header/index.d.ts +7 -7
  406. package/es/components/table/src/table.vue.d.ts +11 -11
  407. package/es/components/tabs/src/tab-pane.vue.d.ts +1 -1
  408. package/es/components/tabs/src/tabs.d.ts +5 -5
  409. package/es/components/tag/src/tag.d.ts +2 -2
  410. package/es/components/tag/src/tag.vue.d.ts +2 -2
  411. package/es/components/text/src/text.d.ts +1 -1
  412. package/es/components/text/src/text.vue.d.ts +1 -1
  413. package/es/components/time-picker/src/common/picker.vue.d.ts +12 -12
  414. package/es/components/time-picker/src/common/props.d.ts +1 -1
  415. package/es/components/time-picker/src/time-picker.d.ts +4 -4
  416. package/es/components/time-select/src/time-select.vue.d.ts +8 -8
  417. package/es/components/timeline/src/timeline-item.d.ts +2 -2
  418. package/es/components/timeline/src/timeline-item.vue.d.ts +1 -1
  419. package/es/components/tooltip/src/content.d.ts +1 -1
  420. package/es/components/tooltip/src/content.mjs +1 -2
  421. package/es/components/tooltip/src/content.mjs.map +1 -1
  422. package/es/components/tooltip/src/content.vue.d.ts +5 -5
  423. package/es/components/tooltip/src/content.vue_vue_type_script_setup_true_lang.mjs +69 -73
  424. package/es/components/tooltip/src/content.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  425. package/es/components/tooltip/src/content2.mjs.map +1 -1
  426. package/es/components/tooltip/src/tooltip.d.ts +2 -2
  427. package/es/components/tooltip/src/tooltip.vue.d.ts +5 -5
  428. package/es/components/tooltip/src/trigger.d.ts +1 -1
  429. package/es/components/tour/src/content.d.ts +1 -1
  430. package/es/components/tour/src/step.d.ts +1 -1
  431. package/es/components/tour/src/tour.d.ts +2 -2
  432. package/es/components/tour/src/tour.mjs +1 -2
  433. package/es/components/tour/src/tour.mjs.map +1 -1
  434. package/es/components/tour/src/tour.vue.d.ts +3 -3
  435. package/es/components/tour/src/tour.vue_vue_type_script_setup_true_lang.mjs +36 -40
  436. package/es/components/tour/src/tour.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  437. package/es/components/tour/src/tour2.mjs.map +1 -1
  438. package/es/components/transfer/src/transfer.vue.d.ts +2 -2
  439. package/es/components/tree/src/tree.vue.d.ts +7 -7
  440. package/es/components/tree-select/src/tree-select.vue.d.ts +18 -18
  441. package/es/components/upload/src/upload.vue.d.ts +1 -1
  442. package/es/components/virtual-list/src/builders/build-grid.d.ts +1 -1
  443. package/es/components/virtual-list/src/components/dynamic-size-grid.d.ts +1 -1
  444. package/es/components/virtual-list/src/components/dynamic-size-list.d.ts +4 -4
  445. package/es/components/virtual-list/src/components/fixed-size-grid.d.ts +1 -1
  446. package/es/components/virtual-list/src/components/fixed-size-list.d.ts +4 -4
  447. package/es/components/virtual-list/src/props.d.ts +2 -2
  448. package/es/components/watermark/src/watermark.vue.d.ts +1 -1
  449. package/es/hooks/use-floating/index.d.ts +8 -8
  450. package/es/hooks/use-popper/index.d.ts +2 -2
  451. package/es/version.mjs +1 -1
  452. package/es/version.mjs.map +1 -1
  453. package/lib/components/affix/src/affix.d.ts +3 -3
  454. package/lib/components/affix/src/affix.js +1 -2
  455. package/lib/components/affix/src/affix.js.map +1 -1
  456. package/lib/components/affix/src/affix.vue.d.ts +3 -3
  457. package/lib/components/affix/src/affix.vue_vue_type_script_setup_true_lang.js +7 -11
  458. package/lib/components/affix/src/affix.vue_vue_type_script_setup_true_lang.js.map +1 -1
  459. package/lib/components/affix/src/affix2.js.map +1 -1
  460. package/lib/components/alert/src/alert.d.ts +2 -2
  461. package/lib/components/alert/src/alert.vue.d.ts +1 -1
  462. package/lib/components/anchor/src/anchor.d.ts +2 -2
  463. package/lib/components/anchor/src/anchor.vue.d.ts +4 -4
  464. package/lib/components/autocomplete/src/autocomplete.d.ts +4 -4
  465. package/lib/components/autocomplete/src/autocomplete.vue.d.ts +5 -5
  466. package/lib/components/avatar/src/avatar.d.ts +1 -1
  467. package/lib/components/backtop/src/backtop.vue.d.ts +2 -2
  468. package/lib/components/badge/src/badge.d.ts +1 -1
  469. package/lib/components/badge/src/badge.vue.d.ts +1 -1
  470. package/lib/components/button/src/button-group.vue.d.ts +1 -1
  471. package/lib/components/button/src/button.d.ts +2 -2
  472. package/lib/components/button/src/button.vue.d.ts +2 -2
  473. package/lib/components/calendar/src/calendar.vue.d.ts +1 -1
  474. package/lib/components/carousel/src/carousel.d.ts +2 -2
  475. package/lib/components/carousel/src/carousel.vue.d.ts +1 -1
  476. package/lib/components/cascader/src/cascader.d.ts +3 -3
  477. package/lib/components/cascader/src/cascader.vue.d.ts +12 -12
  478. package/lib/components/cascader-panel/src/index.vue.d.ts +3 -3
  479. package/lib/components/check-tag/src/check-tag.d.ts +1 -1
  480. package/lib/components/checkbox/src/checkbox-button.vue.d.ts +2 -2
  481. package/lib/components/checkbox/src/checkbox-group.vue.d.ts +5 -5
  482. package/lib/components/checkbox/src/checkbox.vue.d.ts +2 -2
  483. package/lib/components/col/src/col.vue.d.ts +1 -1
  484. package/lib/components/collapse/src/collapse-item.vue.d.ts +1 -1
  485. package/lib/components/collapse/src/collapse.vue.d.ts +2 -2
  486. package/lib/components/color-picker/src/color-picker.d.ts +1 -1
  487. package/lib/components/color-picker/src/color-picker.vue.d.ts +7 -7
  488. package/lib/components/config-provider/src/hooks/use-global-config.d.ts +1 -1
  489. package/lib/components/countdown/src/countdown.vue.d.ts +1 -1
  490. package/lib/components/date-picker/src/date-picker.d.ts +4 -4
  491. package/lib/components/date-picker/src/props.d.ts +1 -1
  492. package/lib/components/date-picker-panel/src/date-picker-panel.d.ts +1 -1
  493. package/lib/components/descriptions/src/description.d.ts +1 -1
  494. package/lib/components/descriptions/src/description.vue.d.ts +1 -1
  495. package/lib/components/dialog/src/dialog.d.ts +1 -1
  496. package/lib/components/dialog/src/dialog.js +1 -2
  497. package/lib/components/dialog/src/dialog.js.map +1 -1
  498. package/lib/components/dialog/src/dialog.vue.d.ts +3 -3
  499. package/lib/components/dialog/src/dialog.vue_vue_type_script_setup_true_lang.js +98 -102
  500. package/lib/components/dialog/src/dialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  501. package/lib/components/dialog/src/dialog2.js.map +1 -1
  502. package/lib/components/divider/src/divider.d.ts +1 -1
  503. package/lib/components/divider/src/divider.vue.d.ts +1 -1
  504. package/lib/components/drawer/src/drawer.d.ts +1 -1
  505. package/lib/components/drawer/src/drawer.vue.d.ts +7 -7
  506. package/lib/components/drawer/src/drawer.vue_vue_type_script_setup_true_lang.js +118 -122
  507. package/lib/components/drawer/src/drawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  508. package/lib/components/drawer/src/drawer2.js.map +1 -1
  509. package/lib/components/dropdown/src/dropdown-item.vue.d.ts +3 -3
  510. package/lib/components/dropdown/src/dropdown.d.ts +4 -4
  511. package/lib/components/dropdown/src/dropdown.vue.d.ts +37 -37
  512. package/lib/components/focus-trap/src/focus-trap.vue.d.ts +1 -1
  513. package/lib/components/form/src/form-item.d.ts +1 -1
  514. package/lib/components/form/src/form.d.ts +1 -1
  515. package/lib/components/image/src/image.d.ts +1 -1
  516. package/lib/components/image/src/image.vue.d.ts +2 -2
  517. package/lib/components/image-viewer/src/image-viewer.vue.d.ts +10 -10
  518. package/lib/components/image-viewer/src/image-viewer.vue_vue_type_script_setup_true_lang.js +112 -116
  519. package/lib/components/image-viewer/src/image-viewer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  520. package/lib/components/image-viewer/src/image-viewer2.js.map +1 -1
  521. package/lib/components/input/src/input.d.ts +2 -2
  522. package/lib/components/input/src/input.vue.d.ts +21 -21
  523. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js +17 -11
  524. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  525. package/lib/components/input/src/input2.js.map +1 -1
  526. package/lib/components/input-number/src/input-number.d.ts +21 -1
  527. package/lib/components/input-number/src/input-number.js +2 -0
  528. package/lib/components/input-number/src/input-number.js.map +1 -1
  529. package/lib/components/input-number/src/input-number.vue.d.ts +8 -8
  530. package/lib/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.js +12 -6
  531. package/lib/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.js.map +1 -1
  532. package/lib/components/input-number/src/input-number2.js.map +1 -1
  533. package/lib/components/input-otp/src/input-otp.vue.d.ts +8 -8
  534. package/lib/components/input-tag/src/input-tag.d.ts +2 -2
  535. package/lib/components/input-tag/src/input-tag.vue.d.ts +11 -11
  536. package/lib/components/link/src/link.d.ts +1 -1
  537. package/lib/components/link/src/link.vue.d.ts +1 -1
  538. package/lib/components/mention/src/mention.d.ts +3 -3
  539. package/lib/components/mention/src/mention.vue.d.ts +6 -6
  540. package/lib/components/menu/src/menu.d.ts +9 -9
  541. package/lib/components/menu/src/sub-menu.d.ts +1 -1
  542. package/lib/components/message/src/message.d.ts +2 -2
  543. package/lib/components/message/src/message.vue.d.ts +5 -5
  544. package/lib/components/notification/src/notification.d.ts +1 -1
  545. package/lib/components/notification/src/notification.vue.d.ts +4 -4
  546. package/lib/components/pagination/src/pagination.d.ts +1 -1
  547. package/lib/components/popconfirm/src/popconfirm.d.ts +2 -2
  548. package/lib/components/popconfirm/src/popconfirm.vue.d.ts +4 -4
  549. package/lib/components/popover/src/popover.d.ts +3 -3
  550. package/lib/components/popover/src/popover.vue.d.ts +3 -3
  551. package/lib/components/popper/src/composables/use-content.d.ts +2 -2
  552. package/lib/components/popper/src/composables/use-focus-trap.d.ts +1 -1
  553. package/lib/components/popper/src/content.vue.d.ts +8 -8
  554. package/lib/components/progress/src/progress.vue.d.ts +1 -1
  555. package/lib/components/radio/src/radio-group.vue.d.ts +5 -5
  556. package/lib/components/radio/src/radio.vue.d.ts +2 -2
  557. package/lib/components/rate/src/rate.vue.d.ts +2 -2
  558. package/lib/components/result/src/result.d.ts +1 -1
  559. package/lib/components/result/src/result.vue.d.ts +1 -1
  560. package/lib/components/roving-focus-group/src/roving-focus-group.d.ts +1 -1
  561. package/lib/components/roving-focus-group/src/roving-focus-group.vue.d.ts +2 -2
  562. package/lib/components/row/src/row.d.ts +2 -2
  563. package/lib/components/segmented/index.d.ts +3 -3
  564. package/lib/components/segmented/src/segmented.d.ts +1 -1
  565. package/lib/components/segmented/src/segmented.vue.d.ts +2 -2
  566. package/lib/components/select/src/select.d.ts +4 -4
  567. package/lib/components/select/src/select.vue.d.ts +41 -41
  568. package/lib/components/select-v2/src/defaults.d.ts +4 -4
  569. package/lib/components/select-v2/src/select.vue.d.ts +40 -40
  570. package/lib/components/slider/src/button.vue.d.ts +1 -1
  571. package/lib/components/slider/src/slider.vue.d.ts +4 -4
  572. package/lib/components/space/src/space.d.ts +4 -4
  573. package/lib/components/splitter/src/splitter.d.ts +1 -1
  574. package/lib/components/statistic/src/statistic.vue.d.ts +2 -2
  575. package/lib/components/steps/src/item.d.ts +1 -1
  576. package/lib/components/steps/src/item.vue.d.ts +1 -1
  577. package/lib/components/steps/src/steps.d.ts +3 -3
  578. package/lib/components/steps/src/steps.vue.d.ts +1 -1
  579. package/lib/components/switch/src/switch.vue.d.ts +3 -3
  580. package/lib/components/table/src/table-column/index.d.ts +8 -8
  581. package/lib/components/table/src/table-header/index.d.ts +7 -7
  582. package/lib/components/table/src/table.vue.d.ts +11 -11
  583. package/lib/components/tabs/src/tab-pane.vue.d.ts +1 -1
  584. package/lib/components/tabs/src/tabs.d.ts +5 -5
  585. package/lib/components/tag/src/tag.d.ts +2 -2
  586. package/lib/components/tag/src/tag.vue.d.ts +2 -2
  587. package/lib/components/text/src/text.d.ts +1 -1
  588. package/lib/components/text/src/text.vue.d.ts +1 -1
  589. package/lib/components/time-picker/src/common/picker.vue.d.ts +12 -12
  590. package/lib/components/time-picker/src/common/props.d.ts +1 -1
  591. package/lib/components/time-picker/src/time-picker.d.ts +4 -4
  592. package/lib/components/time-select/src/time-select.vue.d.ts +8 -8
  593. package/lib/components/timeline/src/timeline-item.d.ts +2 -2
  594. package/lib/components/timeline/src/timeline-item.vue.d.ts +1 -1
  595. package/lib/components/tooltip/src/content.d.ts +1 -1
  596. package/lib/components/tooltip/src/content.js +1 -2
  597. package/lib/components/tooltip/src/content.js.map +1 -1
  598. package/lib/components/tooltip/src/content.vue.d.ts +5 -5
  599. package/lib/components/tooltip/src/content.vue_vue_type_script_setup_true_lang.js +72 -76
  600. package/lib/components/tooltip/src/content.vue_vue_type_script_setup_true_lang.js.map +1 -1
  601. package/lib/components/tooltip/src/content2.js.map +1 -1
  602. package/lib/components/tooltip/src/tooltip.d.ts +2 -2
  603. package/lib/components/tooltip/src/tooltip.vue.d.ts +5 -5
  604. package/lib/components/tooltip/src/trigger.d.ts +1 -1
  605. package/lib/components/tour/src/content.d.ts +1 -1
  606. package/lib/components/tour/src/step.d.ts +1 -1
  607. package/lib/components/tour/src/tour.d.ts +2 -2
  608. package/lib/components/tour/src/tour.js +1 -2
  609. package/lib/components/tour/src/tour.js.map +1 -1
  610. package/lib/components/tour/src/tour.vue.d.ts +3 -3
  611. package/lib/components/tour/src/tour.vue_vue_type_script_setup_true_lang.js +39 -43
  612. package/lib/components/tour/src/tour.vue_vue_type_script_setup_true_lang.js.map +1 -1
  613. package/lib/components/tour/src/tour2.js.map +1 -1
  614. package/lib/components/transfer/src/transfer.vue.d.ts +2 -2
  615. package/lib/components/tree/src/tree.vue.d.ts +7 -7
  616. package/lib/components/tree-select/src/tree-select.vue.d.ts +18 -18
  617. package/lib/components/upload/src/upload.vue.d.ts +1 -1
  618. package/lib/components/virtual-list/src/builders/build-grid.d.ts +1 -1
  619. package/lib/components/virtual-list/src/components/dynamic-size-grid.d.ts +1 -1
  620. package/lib/components/virtual-list/src/components/dynamic-size-list.d.ts +4 -4
  621. package/lib/components/virtual-list/src/components/fixed-size-grid.d.ts +1 -1
  622. package/lib/components/virtual-list/src/components/fixed-size-list.d.ts +4 -4
  623. package/lib/components/virtual-list/src/props.d.ts +2 -2
  624. package/lib/components/watermark/src/watermark.vue.d.ts +1 -1
  625. package/lib/hooks/use-floating/index.d.ts +8 -8
  626. package/lib/hooks/use-popper/index.d.ts +2 -2
  627. package/lib/version.js +1 -1
  628. package/lib/version.js.map +1 -1
  629. package/package.json +3 -3
  630. package/tags.json +1 -1
  631. package/theme-chalk/el-input.css +1 -1
  632. package/theme-chalk/index.css +1 -1
  633. package/theme-chalk/src/input.scss +4 -0
  634. package/web-types.json +1 -1
  635. package/es/components/teleport/index.d.ts +0 -9
  636. package/es/components/teleport/index.mjs +0 -10
  637. package/es/components/teleport/index.mjs.map +0 -1
  638. package/es/components/teleport/src/teleport.d.ts +0 -21
  639. package/es/components/teleport/src/teleport.mjs +0 -14
  640. package/es/components/teleport/src/teleport.mjs.map +0 -1
  641. package/es/components/teleport/src/teleport.vue.d.ts +0 -39
  642. package/es/components/teleport/src/teleport.vue_vue_type_script_setup_true_lang.mjs +0 -20
  643. package/es/components/teleport/src/teleport.vue_vue_type_script_setup_true_lang.mjs.map +0 -1
  644. package/es/components/teleport/src/teleport2.mjs +0 -8
  645. package/es/components/teleport/src/teleport2.mjs.map +0 -1
  646. package/es/components/teleport/style/css.mjs +0 -0
  647. package/es/components/teleport/style/index.mjs +0 -0
  648. package/lib/components/teleport/index.d.ts +0 -9
  649. package/lib/components/teleport/index.js +0 -13
  650. package/lib/components/teleport/index.js.map +0 -1
  651. package/lib/components/teleport/src/teleport.d.ts +0 -21
  652. package/lib/components/teleport/src/teleport.js +0 -15
  653. package/lib/components/teleport/src/teleport.js.map +0 -1
  654. package/lib/components/teleport/src/teleport.vue.d.ts +0 -39
  655. package/lib/components/teleport/src/teleport.vue_vue_type_script_setup_true_lang.js +0 -21
  656. package/lib/components/teleport/src/teleport.vue_vue_type_script_setup_true_lang.js.map +0 -1
  657. package/lib/components/teleport/src/teleport2.js +0 -9
  658. package/lib/components/teleport/src/teleport2.js.map +0 -1
  659. package/lib/components/teleport/style/css.js +0 -1
  660. package/lib/components/teleport/style/index.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"input.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../../../packages/components/input/src/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n containerKls,\n {\n [nsInput.bm('group', 'append')]: $slots.append,\n [nsInput.bm('group', 'prepend')]: $slots.prepend,\n },\n ]\"\n :style=\"containerStyle\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- input -->\n <template v-if=\"type !== 'textarea'\">\n <!-- prepend slot -->\n <div v-if=\"$slots.prepend\" :class=\"nsInput.be('group', 'prepend')\">\n <slot name=\"prepend\" />\n </div>\n\n <div ref=\"wrapperRef\" :class=\"wrapperKls\">\n <!-- prefix slot -->\n <span v-if=\"$slots.prefix || prefixIcon\" :class=\"nsInput.e('prefix')\">\n <span :class=\"nsInput.e('prefix-inner')\">\n <slot name=\"prefix\" />\n <el-icon v-if=\"prefixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </span>\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"input\"\n :class=\"nsInput.e('inner')\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :type=\"showPassword ? (passwordVisible ? 'text' : 'password') : type\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :tabindex=\"tabindex\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :style=\"inputStyle\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n\n <!-- suffix slot -->\n <span v-if=\"suffixVisible\" :class=\"nsInput.e('suffix')\">\n <span :class=\"nsInput.e('suffix-inner')\">\n <template\n v-if=\"!showClear || !showPwdVisible || !isWordLimitVisible\"\n >\n <slot name=\"suffix\" />\n <el-icon v-if=\"suffixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"suffixIcon\" />\n </el-icon>\n </template>\n <el-icon\n v-if=\"showClear\"\n :class=\"[nsInput.e('icon'), nsInput.e('clear')]\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <el-icon\n v-if=\"showPwdVisible\"\n :class=\"[nsInput.e('icon'), nsInput.e('password')]\"\n @click=\"handlePasswordVisible\"\n @mousedown.prevent=\"NOOP\"\n @mouseup.prevent=\"NOOP\"\n >\n <slot name=\"password-icon\" :visible=\"passwordVisible\">\n <component :is=\"passwordIcon\" />\n </slot>\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n <span :class=\"nsInput.e('count-inner')\">\n {{ textLength }} / {{ maxlength }}\n </span>\n </span>\n <el-icon\n v-if=\"validateState && validateIcon && needStatusIcon\"\n :class=\"[\n nsInput.e('icon'),\n nsInput.e('validateIcon'),\n nsInput.is('loading', validateState === 'validating'),\n ]\"\n >\n <component :is=\"validateIcon\" />\n </el-icon>\n </span>\n </span>\n </div>\n\n <!-- append slot -->\n <div v-if=\"$slots.append\" :class=\"nsInput.be('group', 'append')\">\n <slot name=\"append\" />\n </div>\n </template>\n\n <!-- textarea -->\n <template v-else>\n <textarea\n :id=\"inputId\"\n ref=\"textarea\"\n :class=\"[\n nsTextarea.e('inner'),\n nsInput.is('focus', isFocused),\n nsTextarea.is('clearable', clearable),\n ]\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :tabindex=\"tabindex\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :style=\"textareaStyle\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :rows=\"rows\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n <el-icon\n v-if=\"showClear\"\n :class=\"[nsTextarea.e('icon'), nsTextarea.e('clear')]\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :style=\"countStyle\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n {{ textLength }} / {{ maxlength }}\n </span>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n shallowRef,\n toRef,\n useAttrs as useRawAttrs,\n useSlots,\n watch,\n} from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { isNil } from 'lodash-unified'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { Hide, View } from '@element-plus/icons-vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport {\n NOOP,\n ValidateComponentsMap,\n debugWarn,\n isClient,\n isObject,\n} from '@element-plus/utils'\nimport {\n useAttrs,\n useComposition,\n useCursor,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { calcTextareaHeight, looseToNumber } from './utils'\nimport { inputEmits, inputPropsDefaults } from './input'\n\nimport type { StyleValue } from 'vue'\nimport type { InputProps } from './input'\n\ntype TargetElement = HTMLInputElement | HTMLTextAreaElement\n\nconst COMPONENT_NAME = 'ElInput'\ndefineOptions({\n name: COMPONENT_NAME,\n inheritAttrs: false,\n})\nconst props = withDefaults(defineProps<InputProps>(), inputPropsDefaults)\nconst emit = defineEmits(inputEmits)\n\nconst rawAttrs = useRawAttrs()\nconst slots = useSlots()\n\nconst containerKls = computed(() => [\n props.type === 'textarea' ? nsTextarea.b() : nsInput.b(),\n nsInput.m(inputSize.value),\n nsInput.is('disabled', inputDisabled.value),\n nsInput.is('exceed', inputExceed.value),\n {\n [nsInput.b('group')]: slots.prepend || slots.append,\n [nsInput.m('prefix')]: slots.prefix || props.prefixIcon,\n [nsInput.m('suffix')]:\n slots.suffix || props.suffixIcon || props.clearable || props.showPassword,\n [nsInput.bm('suffix', 'password-clear')]:\n showClear.value && showPwdVisible.value,\n [nsInput.b('hidden')]: props.type === 'hidden',\n },\n rawAttrs.class,\n])\n\nconst wrapperKls = computed(() => [\n nsInput.e('wrapper'),\n nsInput.is('focus', isFocused.value),\n])\n\nconst attrs = useAttrs()\nconst maxlength = computed(() => props.maxlength?.toString())\n\nconst { form: elForm, formItem: elFormItem } = useFormItem()\nconst { inputId } = useFormItemInputId(props, {\n formItemContext: elFormItem,\n})\nconst inputSize = useFormSize()\nconst inputDisabled = useFormDisabled()\nconst nsInput = useNamespace('input')\nconst nsTextarea = useNamespace('textarea')\n\nconst input = shallowRef<HTMLInputElement>()\nconst textarea = shallowRef<HTMLTextAreaElement>()\n\nconst hovering = ref(false)\nconst passwordVisible = ref(false)\nconst countStyle = ref<StyleValue>()\nconst textareaCalcStyle = shallowRef(props.inputStyle)\nconst saveValue = ref('')\n\nconst _ref = computed(() => input.value || textarea.value)\n\n// wrapperRef for type=\"text\", handleFocus and handleBlur for type=\"textarea\"\n// @ts-ignore - used in template ref binding, TS cannot detect template usage\nconst { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(\n _ref,\n {\n disabled: inputDisabled,\n afterBlur() {\n if (props.validateEvent) {\n elFormItem?.validate?.('blur').catch(NOOP)\n }\n },\n }\n)\n\nconst needStatusIcon = computed(() => elForm?.statusIcon ?? false)\nconst validateState = computed(() => elFormItem?.validateState || '')\nconst validateIcon = computed(\n () => validateState.value && ValidateComponentsMap[validateState.value]\n)\nconst passwordIcon = computed(() => (passwordVisible.value ? View : Hide))\nconst containerStyle = computed<StyleValue>(() => [\n rawAttrs.style as StyleValue,\n])\nconst textareaStyle = computed<StyleValue>(() => [\n props.inputStyle,\n textareaCalcStyle.value,\n { resize: props.resize },\n])\nconst nativeInputValue = computed(() =>\n isNil(props.modelValue) ? '' : String(props.modelValue)\n)\nconst showClear = computed(\n () =>\n props.clearable &&\n !inputDisabled.value &&\n !props.readonly &&\n !!nativeInputValue.value &&\n (isFocused.value || hovering.value)\n)\nconst showPwdVisible = computed(\n () => props.showPassword && !inputDisabled.value && !!nativeInputValue.value\n)\nconst isWordLimitVisible = computed(\n () =>\n props.showWordLimit &&\n !!maxlength.value &&\n (props.type === 'text' || props.type === 'textarea') &&\n !inputDisabled.value &&\n !props.readonly &&\n !props.showPassword\n)\nconst textLength = computed(() => {\n if (props.countGraphemes && props.showWordLimit) {\n return props.countGraphemes(nativeInputValue.value)\n }\n return nativeInputValue.value.length\n})\nconst inputExceed = computed(\n () =>\n // show exceed style if length of initial value greater then maxlength\n !!isWordLimitVisible.value && textLength.value > Number(maxlength.value)\n)\nconst suffixVisible = computed(\n () =>\n !!slots.suffix ||\n !!props.suffixIcon ||\n showClear.value ||\n props.showPassword ||\n isWordLimitVisible.value ||\n (!!validateState.value && needStatusIcon.value)\n)\nconst hasModelModifiers = computed(\n () => !!Object.keys(props.modelModifiers).length\n)\n\nconst [recordCursor, setCursor] = useCursor(input)\n\nuseResizeObserver(textarea, (entries) => {\n onceInitSizeTextarea()\n if (\n !isWordLimitVisible.value ||\n (props.resize !== 'both' && props.resize !== 'horizontal')\n )\n return\n const entry = entries[0]\n const { width } = entry.contentRect\n countStyle.value = {\n /** right: 100% - width + padding(22) - right(10) */\n right: `calc(100% - ${width + 22 - 10}px)`,\n }\n})\n\nconst resizeTextarea = () => {\n const { type, autosize } = props\n\n if (!isClient || type !== 'textarea' || !textarea.value) return\n\n if (autosize) {\n const minRows = isObject(autosize) ? autosize.minRows : undefined\n const maxRows = isObject(autosize) ? autosize.maxRows : undefined\n const textareaStyle = calcTextareaHeight(textarea.value, minRows, maxRows)\n\n // If the scrollbar is displayed, the height of the textarea needs more space than the calculated height.\n // If set textarea height in this case, the scrollbar will not hide.\n // So we need to hide scrollbar first, and reset it in next tick.\n // see https://github.com/element-plus/element-plus/issues/8825\n textareaCalcStyle.value = {\n overflowY: 'hidden',\n ...textareaStyle,\n }\n\n nextTick(() => {\n // NOTE: Force repaint to make sure the style set above is applied.\n textarea.value!.offsetHeight\n textareaCalcStyle.value = textareaStyle\n })\n } else {\n textareaCalcStyle.value = {\n minHeight: calcTextareaHeight(textarea.value).minHeight,\n }\n }\n}\n\nconst createOnceInitResize = (resizeTextarea: () => void) => {\n let isInit = false\n return () => {\n if (isInit || !props.autosize) return\n const isElHidden = textarea.value?.offsetParent === null\n if (!isElHidden) {\n setTimeout(resizeTextarea)\n isInit = true\n }\n }\n}\n// fix: https://github.com/element-plus/element-plus/issues/12074\nconst onceInitSizeTextarea = createOnceInitResize(resizeTextarea)\n\nconst setNativeInputValue = () => {\n const input = _ref.value\n const formatterValue = props.formatter\n ? props.formatter(nativeInputValue.value)\n : nativeInputValue.value\n if (!input || input.value === formatterValue || props.type === 'file') return\n input.value = formatterValue\n}\n\nconst formatValue = (value: string) => {\n const { trim, number } = props.modelModifiers\n if (trim) {\n value = value.trim()\n }\n if (number) {\n value = `${looseToNumber(value)}`\n }\n if (props.formatter && props.parser) {\n value = props.parser(value)\n }\n return value\n}\n\nconst handleInput = async (event: Event) => {\n // should not emit input during composition\n // see: https://github.com/ElemeFE/element/issues/10516\n if (isComposing.value) return\n\n const { lazy } = props.modelModifiers\n let { value } = event.target as TargetElement\n let shouldForceNativeUpdate = false\n if (lazy) {\n emit(INPUT_EVENT, value)\n return\n }\n\n value = formatValue(value)\n\n if (props.countGraphemes && maxlength.value != null) {\n const limit = Number(maxlength.value)\n const graphemes = props.countGraphemes(value)\n const saveGraphemes = props.countGraphemes(saveValue.value)\n if (graphemes > limit && graphemes > saveGraphemes) {\n // If current value already exceeds limit, block further input and keep exceed state.\n if (saveGraphemes > limit) {\n value = saveValue.value\n shouldForceNativeUpdate = true\n } else {\n // Keep unchanged suffix like native maxlength behavior.\n // Instead of truncating from the end of the whole string,\n // only limit the inserted segment to available capacity.\n const prevValue = saveValue.value\n const nextValue = value\n let prefixLen = 0\n\n while (\n prefixLen < prevValue.length &&\n prefixLen < nextValue.length &&\n prevValue[prefixLen] === nextValue[prefixLen]\n ) {\n prefixLen++\n }\n\n let prevSuffixIndex = prevValue.length\n let nextSuffixIndex = nextValue.length\n while (\n prevSuffixIndex > prefixLen &&\n nextSuffixIndex > prefixLen &&\n prevValue[prevSuffixIndex - 1] === nextValue[nextSuffixIndex - 1]\n ) {\n prevSuffixIndex--\n nextSuffixIndex--\n }\n\n const before = nextValue.slice(0, prefixLen)\n const removed = prevValue.slice(prefixLen, prevSuffixIndex)\n const inserted = nextValue.slice(prefixLen, nextSuffixIndex)\n const after = nextValue.slice(nextSuffixIndex)\n\n const removedCount = props.countGraphemes(removed)\n const baseCount = saveGraphemes - removedCount\n const availableInserted = Math.max(0, limit - baseCount)\n\n let acceptedInserted = ''\n if (availableInserted > 0) {\n // Use Intl.Segmenter for proper grapheme cluster iteration if available.\n if (typeof Intl !== 'undefined' && 'Segmenter' in Intl) {\n const segmenter = new Intl.Segmenter(undefined, {\n granularity: 'grapheme',\n })\n for (const { segment } of segmenter.segment(inserted)) {\n const candidate = acceptedInserted + segment\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n } else {\n // Fallback to code-point iteration for older environments.\n for (const char of Array.from(inserted)) {\n const candidate = acceptedInserted + char\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n }\n }\n\n value = before + acceptedInserted + after\n shouldForceNativeUpdate = true\n }\n }\n }\n\n // hack for https://github.com/ElemeFE/element/issues/8548\n // should remove the following line when we don't support IE\n if (String(value) === nativeInputValue.value) {\n // preserve native features while being compatible with #9501\n if (props.formatter || shouldForceNativeUpdate) {\n const target = event.target as TargetElement\n const blockedValue = target.value\n const selectionStart = target.selectionStart\n const selectionEnd = target.selectionEnd\n setNativeInputValue()\n // Keep caret position stable when input is blocked and value is reset.\n if (\n shouldForceNativeUpdate &&\n _ref.value &&\n selectionStart != null &&\n selectionEnd != null\n ) {\n const restoredValue = _ref.value.value\n const afterTxt = blockedValue.slice(Math.max(0, selectionEnd))\n let caretPos = Math.min(selectionStart, restoredValue.length)\n\n if (afterTxt && restoredValue.endsWith(afterTxt)) {\n caretPos = restoredValue.length - afterTxt.length\n }\n\n _ref.value.setSelectionRange(caretPos, caretPos)\n }\n }\n return\n }\n saveValue.value = value\n\n recordCursor()\n emit(UPDATE_MODEL_EVENT, value)\n emit(INPUT_EVENT, value)\n\n // ensure native input value is controlled\n // see: https://github.com/ElemeFE/element/issues/12850\n await nextTick()\n\n if ((props.formatter && props.parser) || !hasModelModifiers.value) {\n setNativeInputValue()\n }\n setCursor()\n}\n\nconst handleChange = async (event: Event) => {\n let { value } = event.target as TargetElement\n\n value = formatValue(value)\n if (props.modelModifiers.lazy) {\n emit(UPDATE_MODEL_EVENT, value)\n }\n emit(CHANGE_EVENT, value, event)\n\n await nextTick()\n setNativeInputValue()\n}\n\nconst {\n isComposing,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n} = useComposition({ emit, afterComposition: handleInput })\n\nconst handlePasswordVisible = () => {\n passwordVisible.value = !passwordVisible.value\n}\n\nconst focus = () => _ref.value?.focus()\n\nconst blur = () => _ref.value?.blur()\n\nconst handleMouseLeave = (evt: MouseEvent) => {\n hovering.value = false\n emit('mouseleave', evt)\n}\n\nconst handleMouseEnter = (evt: MouseEvent) => {\n hovering.value = true\n emit('mouseenter', evt)\n}\n\nconst handleKeydown = (evt: KeyboardEvent) => {\n emit('keydown', evt)\n}\n\nconst select = () => {\n _ref.value?.select()\n}\n\nconst clear = (evt?: MouseEvent) => {\n emit(UPDATE_MODEL_EVENT, '')\n emit(CHANGE_EVENT, '')\n emit('clear', evt)\n emit(INPUT_EVENT, '')\n}\n\nwatch(\n () => props.modelValue,\n () => {\n nextTick(() => resizeTextarea())\n if (props.validateEvent) {\n elFormItem?.validate?.('change').catch(NOOP)\n }\n }\n)\n\nwatch(\n () => nativeInputValue.value,\n (val) => {\n saveValue.value = val\n },\n { immediate: true }\n)\n\n// native input value is set explicitly\n// do not use v-model / :value in template\n// see: https://github.com/ElemeFE/element/issues/14521\nwatch(nativeInputValue, (newValue) => {\n if (!_ref.value) {\n return\n }\n const { trim, number } = props.modelModifiers\n const elValue = _ref.value.value\n const displayValue =\n (number || props.type === 'number') && !/^0\\d/.test(elValue)\n ? `${looseToNumber(elValue)}`\n : elValue\n\n if (displayValue === newValue) {\n return\n }\n\n if (document.activeElement === _ref.value && _ref.value.type !== 'range') {\n if (trim && displayValue.trim() === newValue) {\n return\n }\n }\n\n setNativeInputValue()\n})\n\n// when change between <input> and <textarea>,\n// update DOM dependent value and styles\n// https://github.com/ElemeFE/element/issues/14857\nwatch(\n () => props.type,\n async () => {\n await nextTick()\n setNativeInputValue()\n resizeTextarea()\n }\n)\n\nonMounted(() => {\n if (!props.formatter && props.parser) {\n debugWarn(\n COMPONENT_NAME,\n 'If you set the parser, you also need to set the formatter.'\n )\n }\n setNativeInputValue()\n nextTick(resizeTextarea)\n})\n\ndefineExpose({\n /** @description HTML input element */\n input,\n /** @description HTML textarea element */\n textarea,\n /** @description HTML element, input or textarea */\n ref: _ref,\n /** @description style of textarea. */\n textareaStyle,\n\n /** @description from props (used on unit test) */\n autosize: toRef(props, 'autosize'),\n\n /** @description is input composing */\n isComposing,\n\n /** @description whether the password is visible */\n passwordVisible,\n\n /** @description HTML input element native method */\n focus,\n /** @description HTML input element native method */\n blur,\n /** @description HTML input element native method */\n select,\n /** @description clear input value */\n clear,\n /** @description resize textarea. */\n resizeTextarea,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"input.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../../../packages/components/input/src/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n containerKls,\n {\n [nsInput.bm('group', 'append')]: $slots.append,\n [nsInput.bm('group', 'prepend')]: $slots.prepend,\n },\n ]\"\n :style=\"containerStyle\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- input -->\n <template v-if=\"type !== 'textarea'\">\n <!-- prepend slot -->\n <div v-if=\"$slots.prepend\" :class=\"nsInput.be('group', 'prepend')\">\n <slot name=\"prepend\" />\n </div>\n\n <div ref=\"wrapperRef\" :class=\"wrapperKls\">\n <!-- prefix slot -->\n <span v-if=\"$slots.prefix || prefixIcon\" :class=\"nsInput.e('prefix')\">\n <span :class=\"nsInput.e('prefix-inner')\">\n <slot name=\"prefix\" />\n <el-icon v-if=\"prefixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </span>\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"input\"\n :class=\"nsInput.e('inner')\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :type=\"showPassword ? (passwordVisible ? 'text' : 'password') : type\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :tabindex=\"tabindex\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :style=\"inputStyle\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n\n <!-- suffix slot -->\n <span v-if=\"suffixVisible\" :class=\"nsInput.e('suffix')\">\n <span :class=\"nsInput.e('suffix-inner')\">\n <el-icon\n v-if=\"renderClear\"\n :class=\"[nsInput.e('icon'), nsInput.e('clear')]\"\n :style=\"{ visibility: showClear ? 'visible' : 'hidden' }\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <template\n v-if=\"!showClear || !showPwdVisible || !isWordLimitVisible\"\n >\n <slot name=\"suffix\" />\n <el-icon v-if=\"suffixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"suffixIcon\" />\n </el-icon>\n </template>\n <el-icon\n v-if=\"showPwdVisible\"\n :class=\"[nsInput.e('icon'), nsInput.e('password')]\"\n @click=\"handlePasswordVisible\"\n @mousedown.prevent=\"NOOP\"\n @mouseup.prevent=\"NOOP\"\n >\n <slot name=\"password-icon\" :visible=\"passwordVisible\">\n <component :is=\"passwordIcon\" />\n </slot>\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n <span :class=\"nsInput.e('count-inner')\">\n {{ textLength }} / {{ maxlength }}\n </span>\n </span>\n <el-icon\n v-if=\"validateState && validateIcon && needStatusIcon\"\n :class=\"[\n nsInput.e('icon'),\n nsInput.e('validateIcon'),\n nsInput.is('loading', validateState === 'validating'),\n ]\"\n >\n <component :is=\"validateIcon\" />\n </el-icon>\n </span>\n </span>\n </div>\n\n <!-- append slot -->\n <div v-if=\"$slots.append\" :class=\"nsInput.be('group', 'append')\">\n <slot name=\"append\" />\n </div>\n </template>\n\n <!-- textarea -->\n <template v-else>\n <textarea\n :id=\"inputId\"\n ref=\"textarea\"\n :class=\"[\n nsTextarea.e('inner'),\n nsInput.is('focus', isFocused),\n nsTextarea.is('clearable', clearable),\n ]\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :tabindex=\"tabindex\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :style=\"textareaStyle\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :rows=\"rows\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n <el-icon\n v-if=\"showClear\"\n :class=\"[nsTextarea.e('icon'), nsTextarea.e('clear')]\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :style=\"countStyle\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n {{ textLength }} / {{ maxlength }}\n </span>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n shallowRef,\n toRef,\n useAttrs as useRawAttrs,\n useSlots,\n watch,\n} from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { isNil } from 'lodash-unified'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { Hide, View } from '@element-plus/icons-vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport {\n NOOP,\n ValidateComponentsMap,\n debugWarn,\n isClient,\n isObject,\n} from '@element-plus/utils'\nimport {\n useAttrs,\n useComposition,\n useCursor,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { calcTextareaHeight, looseToNumber } from './utils'\nimport { inputEmits, inputPropsDefaults } from './input'\n\nimport type { StyleValue } from 'vue'\nimport type { InputProps } from './input'\n\ntype TargetElement = HTMLInputElement | HTMLTextAreaElement\n\nconst COMPONENT_NAME = 'ElInput'\ndefineOptions({\n name: COMPONENT_NAME,\n inheritAttrs: false,\n})\nconst props = withDefaults(defineProps<InputProps>(), inputPropsDefaults)\nconst emit = defineEmits(inputEmits)\n\nconst rawAttrs = useRawAttrs()\nconst slots = useSlots()\n\nconst containerKls = computed(() => [\n props.type === 'textarea' ? nsTextarea.b() : nsInput.b(),\n nsInput.m(inputSize.value),\n nsInput.is('disabled', inputDisabled.value),\n nsInput.is('exceed', inputExceed.value),\n {\n [nsInput.b('group')]: slots.prepend || slots.append,\n [nsInput.m('prefix')]: slots.prefix || props.prefixIcon,\n [nsInput.m('suffix')]:\n slots.suffix || props.suffixIcon || props.clearable || props.showPassword,\n [nsInput.bm('suffix', 'password-clear')]:\n showClear.value && showPwdVisible.value,\n [nsInput.b('hidden')]: props.type === 'hidden',\n },\n rawAttrs.class,\n])\n\nconst wrapperKls = computed(() => [\n nsInput.e('wrapper'),\n nsInput.is('focus', isFocused.value),\n])\n\nconst attrs = useAttrs()\nconst maxlength = computed(() => props.maxlength?.toString())\n\nconst { form: elForm, formItem: elFormItem } = useFormItem()\nconst { inputId } = useFormItemInputId(props, {\n formItemContext: elFormItem,\n})\nconst inputSize = useFormSize()\nconst inputDisabled = useFormDisabled()\nconst nsInput = useNamespace('input')\nconst nsTextarea = useNamespace('textarea')\n\nconst input = shallowRef<HTMLInputElement>()\nconst textarea = shallowRef<HTMLTextAreaElement>()\n\nconst hovering = ref(false)\nconst passwordVisible = ref(false)\nconst countStyle = ref<StyleValue>()\nconst textareaCalcStyle = shallowRef(props.inputStyle)\nconst saveValue = ref('')\n\nconst _ref = computed(() => input.value || textarea.value)\n\n// wrapperRef for type=\"text\", handleFocus and handleBlur for type=\"textarea\"\n// @ts-ignore - used in template ref binding, TS cannot detect template usage\nconst { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(\n _ref,\n {\n disabled: inputDisabled,\n afterBlur() {\n if (props.validateEvent) {\n elFormItem?.validate?.('blur').catch(NOOP)\n }\n },\n }\n)\n\nconst needStatusIcon = computed(() => elForm?.statusIcon ?? false)\nconst validateState = computed(() => elFormItem?.validateState || '')\nconst validateIcon = computed(\n () => validateState.value && ValidateComponentsMap[validateState.value]\n)\nconst passwordIcon = computed(() => (passwordVisible.value ? View : Hide))\nconst containerStyle = computed<StyleValue>(() => [\n rawAttrs.style as StyleValue,\n])\nconst textareaStyle = computed<StyleValue>(() => [\n props.inputStyle,\n textareaCalcStyle.value,\n { resize: props.resize },\n])\nconst nativeInputValue = computed(() =>\n isNil(props.modelValue) ? '' : String(props.modelValue)\n)\nconst renderClear = computed(\n () => props.clearable && !inputDisabled.value && !props.readonly\n)\nconst showClear = computed(\n () =>\n renderClear.value &&\n !!nativeInputValue.value &&\n (isFocused.value || hovering.value)\n)\nconst showPwdVisible = computed(\n () => props.showPassword && !inputDisabled.value && !!nativeInputValue.value\n)\nconst isWordLimitVisible = computed(\n () =>\n props.showWordLimit &&\n !!maxlength.value &&\n (props.type === 'text' || props.type === 'textarea') &&\n !inputDisabled.value &&\n !props.readonly &&\n !props.showPassword\n)\nconst textLength = computed(() => {\n if (props.countGraphemes && props.showWordLimit) {\n return props.countGraphemes(nativeInputValue.value)\n }\n return nativeInputValue.value.length\n})\nconst inputExceed = computed(\n () =>\n // show exceed style if length of initial value greater then maxlength\n !!isWordLimitVisible.value && textLength.value > Number(maxlength.value)\n)\nconst suffixVisible = computed(\n () =>\n !!slots.suffix ||\n !!props.suffixIcon ||\n props.clearable ||\n props.showPassword ||\n isWordLimitVisible.value ||\n (!!validateState.value && needStatusIcon.value)\n)\nconst hasModelModifiers = computed(\n () => !!Object.keys(props.modelModifiers).length\n)\n\nconst [recordCursor, setCursor] = useCursor(input)\n\nuseResizeObserver(textarea, (entries) => {\n onceInitSizeTextarea()\n if (\n !isWordLimitVisible.value ||\n (props.resize !== 'both' && props.resize !== 'horizontal')\n )\n return\n const entry = entries[0]\n const { width } = entry.contentRect\n countStyle.value = {\n /** right: 100% - width + padding(22) - right(10) */\n right: `calc(100% - ${width + 22 - 10}px)`,\n }\n})\n\nconst resizeTextarea = () => {\n const { type, autosize } = props\n\n if (!isClient || type !== 'textarea' || !textarea.value) return\n\n if (autosize) {\n const minRows = isObject(autosize) ? autosize.minRows : undefined\n const maxRows = isObject(autosize) ? autosize.maxRows : undefined\n const textareaStyle = calcTextareaHeight(textarea.value, minRows, maxRows)\n\n // If the scrollbar is displayed, the height of the textarea needs more space than the calculated height.\n // If set textarea height in this case, the scrollbar will not hide.\n // So we need to hide scrollbar first, and reset it in next tick.\n // see https://github.com/element-plus/element-plus/issues/8825\n textareaCalcStyle.value = {\n overflowY: 'hidden',\n ...textareaStyle,\n }\n\n nextTick(() => {\n // NOTE: Force repaint to make sure the style set above is applied.\n textarea.value!.offsetHeight\n textareaCalcStyle.value = textareaStyle\n })\n } else {\n textareaCalcStyle.value = {\n minHeight: calcTextareaHeight(textarea.value).minHeight,\n }\n }\n}\n\nconst createOnceInitResize = (resizeTextarea: () => void) => {\n let isInit = false\n return () => {\n if (isInit || !props.autosize) return\n const isElHidden = textarea.value?.offsetParent === null\n if (!isElHidden) {\n setTimeout(resizeTextarea)\n isInit = true\n }\n }\n}\n// fix: https://github.com/element-plus/element-plus/issues/12074\nconst onceInitSizeTextarea = createOnceInitResize(resizeTextarea)\n\nconst setNativeInputValue = () => {\n const input = _ref.value\n const formatterValue = props.formatter\n ? props.formatter(nativeInputValue.value)\n : nativeInputValue.value\n if (!input || input.value === formatterValue || props.type === 'file') return\n input.value = formatterValue\n}\n\nconst formatValue = (value: string) => {\n const { trim, number } = props.modelModifiers\n if (trim) {\n value = value.trim()\n }\n if (number) {\n value = `${looseToNumber(value)}`\n }\n if (props.formatter && props.parser) {\n value = props.parser(value)\n }\n return value\n}\n\nconst handleInput = async (event: Event) => {\n // should not emit input during composition\n // see: https://github.com/ElemeFE/element/issues/10516\n if (isComposing.value) return\n\n const { lazy } = props.modelModifiers\n let { value } = event.target as TargetElement\n let shouldForceNativeUpdate = false\n if (lazy) {\n emit(INPUT_EVENT, value)\n return\n }\n\n value = formatValue(value)\n\n if (props.countGraphemes && maxlength.value != null) {\n const limit = Number(maxlength.value)\n const graphemes = props.countGraphemes(value)\n const saveGraphemes = props.countGraphemes(saveValue.value)\n if (graphemes > limit && graphemes > saveGraphemes) {\n // If current value already exceeds limit, block further input and keep exceed state.\n if (saveGraphemes > limit) {\n value = saveValue.value\n shouldForceNativeUpdate = true\n } else {\n // Keep unchanged suffix like native maxlength behavior.\n // Instead of truncating from the end of the whole string,\n // only limit the inserted segment to available capacity.\n const prevValue = saveValue.value\n const nextValue = value\n let prefixLen = 0\n\n while (\n prefixLen < prevValue.length &&\n prefixLen < nextValue.length &&\n prevValue[prefixLen] === nextValue[prefixLen]\n ) {\n prefixLen++\n }\n\n let prevSuffixIndex = prevValue.length\n let nextSuffixIndex = nextValue.length\n while (\n prevSuffixIndex > prefixLen &&\n nextSuffixIndex > prefixLen &&\n prevValue[prevSuffixIndex - 1] === nextValue[nextSuffixIndex - 1]\n ) {\n prevSuffixIndex--\n nextSuffixIndex--\n }\n\n const before = nextValue.slice(0, prefixLen)\n const removed = prevValue.slice(prefixLen, prevSuffixIndex)\n const inserted = nextValue.slice(prefixLen, nextSuffixIndex)\n const after = nextValue.slice(nextSuffixIndex)\n\n const removedCount = props.countGraphemes(removed)\n const baseCount = saveGraphemes - removedCount\n const availableInserted = Math.max(0, limit - baseCount)\n\n let acceptedInserted = ''\n if (availableInserted > 0) {\n // Use Intl.Segmenter for proper grapheme cluster iteration if available.\n if (typeof Intl !== 'undefined' && 'Segmenter' in Intl) {\n const segmenter = new Intl.Segmenter(undefined, {\n granularity: 'grapheme',\n })\n for (const { segment } of segmenter.segment(inserted)) {\n const candidate = acceptedInserted + segment\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n } else {\n // Fallback to code-point iteration for older environments.\n for (const char of Array.from(inserted)) {\n const candidate = acceptedInserted + char\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n }\n }\n\n value = before + acceptedInserted + after\n shouldForceNativeUpdate = true\n }\n }\n }\n\n // hack for https://github.com/ElemeFE/element/issues/8548\n // should remove the following line when we don't support IE\n if (String(value) === nativeInputValue.value) {\n // preserve native features while being compatible with #9501\n if (props.formatter || shouldForceNativeUpdate) {\n const target = event.target as TargetElement\n const blockedValue = target.value\n const selectionStart = target.selectionStart\n const selectionEnd = target.selectionEnd\n setNativeInputValue()\n // Keep caret position stable when input is blocked and value is reset.\n if (\n shouldForceNativeUpdate &&\n _ref.value &&\n selectionStart != null &&\n selectionEnd != null\n ) {\n const restoredValue = _ref.value.value\n const afterTxt = blockedValue.slice(Math.max(0, selectionEnd))\n let caretPos = Math.min(selectionStart, restoredValue.length)\n\n if (afterTxt && restoredValue.endsWith(afterTxt)) {\n caretPos = restoredValue.length - afterTxt.length\n }\n\n _ref.value.setSelectionRange(caretPos, caretPos)\n }\n }\n return\n }\n saveValue.value = value\n\n recordCursor()\n emit(UPDATE_MODEL_EVENT, value)\n emit(INPUT_EVENT, value)\n\n // ensure native input value is controlled\n // see: https://github.com/ElemeFE/element/issues/12850\n await nextTick()\n\n if ((props.formatter && props.parser) || !hasModelModifiers.value) {\n setNativeInputValue()\n }\n setCursor()\n}\n\nconst handleChange = async (event: Event) => {\n let { value } = event.target as TargetElement\n\n value = formatValue(value)\n if (props.modelModifiers.lazy) {\n emit(UPDATE_MODEL_EVENT, value)\n }\n emit(CHANGE_EVENT, value, event)\n\n await nextTick()\n setNativeInputValue()\n}\n\nconst {\n isComposing,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n} = useComposition({ emit, afterComposition: handleInput })\n\nconst handlePasswordVisible = () => {\n passwordVisible.value = !passwordVisible.value\n}\n\nconst focus = () => _ref.value?.focus()\n\nconst blur = () => _ref.value?.blur()\n\nconst handleMouseLeave = (evt: MouseEvent) => {\n hovering.value = false\n emit('mouseleave', evt)\n}\n\nconst handleMouseEnter = (evt: MouseEvent) => {\n hovering.value = true\n emit('mouseenter', evt)\n}\n\nconst handleKeydown = (evt: KeyboardEvent) => {\n emit('keydown', evt)\n}\n\nconst select = () => {\n _ref.value?.select()\n}\n\nconst clear = (evt?: MouseEvent) => {\n emit(UPDATE_MODEL_EVENT, '')\n emit(CHANGE_EVENT, '')\n emit('clear', evt)\n emit(INPUT_EVENT, '')\n}\n\nwatch(\n () => props.modelValue,\n () => {\n nextTick(() => resizeTextarea())\n if (props.validateEvent) {\n elFormItem?.validate?.('change').catch(NOOP)\n }\n }\n)\n\nwatch(\n () => nativeInputValue.value,\n (val) => {\n saveValue.value = val\n },\n { immediate: true }\n)\n\n// native input value is set explicitly\n// do not use v-model / :value in template\n// see: https://github.com/ElemeFE/element/issues/14521\nwatch(nativeInputValue, (newValue) => {\n if (!_ref.value) {\n return\n }\n const { trim, number } = props.modelModifiers\n const elValue = _ref.value.value\n const displayValue =\n (number || props.type === 'number') && !/^0\\d/.test(elValue)\n ? `${looseToNumber(elValue)}`\n : elValue\n\n if (displayValue === newValue) {\n return\n }\n\n if (document.activeElement === _ref.value && _ref.value.type !== 'range') {\n if (trim && displayValue.trim() === newValue) {\n return\n }\n }\n\n setNativeInputValue()\n})\n\n// when change between <input> and <textarea>,\n// update DOM dependent value and styles\n// https://github.com/ElemeFE/element/issues/14857\nwatch(\n () => props.type,\n async () => {\n await nextTick()\n setNativeInputValue()\n resizeTextarea()\n }\n)\n\nonMounted(() => {\n if (!props.formatter && props.parser) {\n debugWarn(\n COMPONENT_NAME,\n 'If you set the parser, you also need to set the formatter.'\n )\n }\n setNativeInputValue()\n nextTick(resizeTextarea)\n})\n\ndefineExpose({\n /** @description HTML input element */\n input,\n /** @description HTML textarea element */\n textarea,\n /** @description HTML element, input or textarea */\n ref: _ref,\n /** @description style of textarea. */\n textareaStyle,\n\n /** @description from props (used on unit test) */\n autosize: toRef(props, 'autosize'),\n\n /** @description is input composing */\n isComposing,\n\n /** @description whether the password is visible */\n passwordVisible,\n\n /** @description HTML input element native method */\n focus,\n /** @description HTML input element native method */\n blur,\n /** @description HTML input element native method */\n select,\n /** @description clear input value */\n clear,\n /** @description resize textarea. */\n resizeTextarea,\n})\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"input2.js","names":[],"sources":["../../../../../../packages/components/input/src/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n containerKls,\n {\n [nsInput.bm('group', 'append')]: $slots.append,\n [nsInput.bm('group', 'prepend')]: $slots.prepend,\n },\n ]\"\n :style=\"containerStyle\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- input -->\n <template v-if=\"type !== 'textarea'\">\n <!-- prepend slot -->\n <div v-if=\"$slots.prepend\" :class=\"nsInput.be('group', 'prepend')\">\n <slot name=\"prepend\" />\n </div>\n\n <div ref=\"wrapperRef\" :class=\"wrapperKls\">\n <!-- prefix slot -->\n <span v-if=\"$slots.prefix || prefixIcon\" :class=\"nsInput.e('prefix')\">\n <span :class=\"nsInput.e('prefix-inner')\">\n <slot name=\"prefix\" />\n <el-icon v-if=\"prefixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </span>\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"input\"\n :class=\"nsInput.e('inner')\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :type=\"showPassword ? (passwordVisible ? 'text' : 'password') : type\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :tabindex=\"tabindex\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :style=\"inputStyle\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n\n <!-- suffix slot -->\n <span v-if=\"suffixVisible\" :class=\"nsInput.e('suffix')\">\n <span :class=\"nsInput.e('suffix-inner')\">\n <template\n v-if=\"!showClear || !showPwdVisible || !isWordLimitVisible\"\n >\n <slot name=\"suffix\" />\n <el-icon v-if=\"suffixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"suffixIcon\" />\n </el-icon>\n </template>\n <el-icon\n v-if=\"showClear\"\n :class=\"[nsInput.e('icon'), nsInput.e('clear')]\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <el-icon\n v-if=\"showPwdVisible\"\n :class=\"[nsInput.e('icon'), nsInput.e('password')]\"\n @click=\"handlePasswordVisible\"\n @mousedown.prevent=\"NOOP\"\n @mouseup.prevent=\"NOOP\"\n >\n <slot name=\"password-icon\" :visible=\"passwordVisible\">\n <component :is=\"passwordIcon\" />\n </slot>\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n <span :class=\"nsInput.e('count-inner')\">\n {{ textLength }} / {{ maxlength }}\n </span>\n </span>\n <el-icon\n v-if=\"validateState && validateIcon && needStatusIcon\"\n :class=\"[\n nsInput.e('icon'),\n nsInput.e('validateIcon'),\n nsInput.is('loading', validateState === 'validating'),\n ]\"\n >\n <component :is=\"validateIcon\" />\n </el-icon>\n </span>\n </span>\n </div>\n\n <!-- append slot -->\n <div v-if=\"$slots.append\" :class=\"nsInput.be('group', 'append')\">\n <slot name=\"append\" />\n </div>\n </template>\n\n <!-- textarea -->\n <template v-else>\n <textarea\n :id=\"inputId\"\n ref=\"textarea\"\n :class=\"[\n nsTextarea.e('inner'),\n nsInput.is('focus', isFocused),\n nsTextarea.is('clearable', clearable),\n ]\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :tabindex=\"tabindex\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :style=\"textareaStyle\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :rows=\"rows\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n <el-icon\n v-if=\"showClear\"\n :class=\"[nsTextarea.e('icon'), nsTextarea.e('clear')]\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :style=\"countStyle\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n {{ textLength }} / {{ maxlength }}\n </span>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n shallowRef,\n toRef,\n useAttrs as useRawAttrs,\n useSlots,\n watch,\n} from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { isNil } from 'lodash-unified'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { Hide, View } from '@element-plus/icons-vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport {\n NOOP,\n ValidateComponentsMap,\n debugWarn,\n isClient,\n isObject,\n} from '@element-plus/utils'\nimport {\n useAttrs,\n useComposition,\n useCursor,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { calcTextareaHeight, looseToNumber } from './utils'\nimport { inputEmits, inputPropsDefaults } from './input'\n\nimport type { StyleValue } from 'vue'\nimport type { InputProps } from './input'\n\ntype TargetElement = HTMLInputElement | HTMLTextAreaElement\n\nconst COMPONENT_NAME = 'ElInput'\ndefineOptions({\n name: COMPONENT_NAME,\n inheritAttrs: false,\n})\nconst props = withDefaults(defineProps<InputProps>(), inputPropsDefaults)\nconst emit = defineEmits(inputEmits)\n\nconst rawAttrs = useRawAttrs()\nconst slots = useSlots()\n\nconst containerKls = computed(() => [\n props.type === 'textarea' ? nsTextarea.b() : nsInput.b(),\n nsInput.m(inputSize.value),\n nsInput.is('disabled', inputDisabled.value),\n nsInput.is('exceed', inputExceed.value),\n {\n [nsInput.b('group')]: slots.prepend || slots.append,\n [nsInput.m('prefix')]: slots.prefix || props.prefixIcon,\n [nsInput.m('suffix')]:\n slots.suffix || props.suffixIcon || props.clearable || props.showPassword,\n [nsInput.bm('suffix', 'password-clear')]:\n showClear.value && showPwdVisible.value,\n [nsInput.b('hidden')]: props.type === 'hidden',\n },\n rawAttrs.class,\n])\n\nconst wrapperKls = computed(() => [\n nsInput.e('wrapper'),\n nsInput.is('focus', isFocused.value),\n])\n\nconst attrs = useAttrs()\nconst maxlength = computed(() => props.maxlength?.toString())\n\nconst { form: elForm, formItem: elFormItem } = useFormItem()\nconst { inputId } = useFormItemInputId(props, {\n formItemContext: elFormItem,\n})\nconst inputSize = useFormSize()\nconst inputDisabled = useFormDisabled()\nconst nsInput = useNamespace('input')\nconst nsTextarea = useNamespace('textarea')\n\nconst input = shallowRef<HTMLInputElement>()\nconst textarea = shallowRef<HTMLTextAreaElement>()\n\nconst hovering = ref(false)\nconst passwordVisible = ref(false)\nconst countStyle = ref<StyleValue>()\nconst textareaCalcStyle = shallowRef(props.inputStyle)\nconst saveValue = ref('')\n\nconst _ref = computed(() => input.value || textarea.value)\n\n// wrapperRef for type=\"text\", handleFocus and handleBlur for type=\"textarea\"\n// @ts-ignore - used in template ref binding, TS cannot detect template usage\nconst { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(\n _ref,\n {\n disabled: inputDisabled,\n afterBlur() {\n if (props.validateEvent) {\n elFormItem?.validate?.('blur').catch(NOOP)\n }\n },\n }\n)\n\nconst needStatusIcon = computed(() => elForm?.statusIcon ?? false)\nconst validateState = computed(() => elFormItem?.validateState || '')\nconst validateIcon = computed(\n () => validateState.value && ValidateComponentsMap[validateState.value]\n)\nconst passwordIcon = computed(() => (passwordVisible.value ? View : Hide))\nconst containerStyle = computed<StyleValue>(() => [\n rawAttrs.style as StyleValue,\n])\nconst textareaStyle = computed<StyleValue>(() => [\n props.inputStyle,\n textareaCalcStyle.value,\n { resize: props.resize },\n])\nconst nativeInputValue = computed(() =>\n isNil(props.modelValue) ? '' : String(props.modelValue)\n)\nconst showClear = computed(\n () =>\n props.clearable &&\n !inputDisabled.value &&\n !props.readonly &&\n !!nativeInputValue.value &&\n (isFocused.value || hovering.value)\n)\nconst showPwdVisible = computed(\n () => props.showPassword && !inputDisabled.value && !!nativeInputValue.value\n)\nconst isWordLimitVisible = computed(\n () =>\n props.showWordLimit &&\n !!maxlength.value &&\n (props.type === 'text' || props.type === 'textarea') &&\n !inputDisabled.value &&\n !props.readonly &&\n !props.showPassword\n)\nconst textLength = computed(() => {\n if (props.countGraphemes && props.showWordLimit) {\n return props.countGraphemes(nativeInputValue.value)\n }\n return nativeInputValue.value.length\n})\nconst inputExceed = computed(\n () =>\n // show exceed style if length of initial value greater then maxlength\n !!isWordLimitVisible.value && textLength.value > Number(maxlength.value)\n)\nconst suffixVisible = computed(\n () =>\n !!slots.suffix ||\n !!props.suffixIcon ||\n showClear.value ||\n props.showPassword ||\n isWordLimitVisible.value ||\n (!!validateState.value && needStatusIcon.value)\n)\nconst hasModelModifiers = computed(\n () => !!Object.keys(props.modelModifiers).length\n)\n\nconst [recordCursor, setCursor] = useCursor(input)\n\nuseResizeObserver(textarea, (entries) => {\n onceInitSizeTextarea()\n if (\n !isWordLimitVisible.value ||\n (props.resize !== 'both' && props.resize !== 'horizontal')\n )\n return\n const entry = entries[0]\n const { width } = entry.contentRect\n countStyle.value = {\n /** right: 100% - width + padding(22) - right(10) */\n right: `calc(100% - ${width + 22 - 10}px)`,\n }\n})\n\nconst resizeTextarea = () => {\n const { type, autosize } = props\n\n if (!isClient || type !== 'textarea' || !textarea.value) return\n\n if (autosize) {\n const minRows = isObject(autosize) ? autosize.minRows : undefined\n const maxRows = isObject(autosize) ? autosize.maxRows : undefined\n const textareaStyle = calcTextareaHeight(textarea.value, minRows, maxRows)\n\n // If the scrollbar is displayed, the height of the textarea needs more space than the calculated height.\n // If set textarea height in this case, the scrollbar will not hide.\n // So we need to hide scrollbar first, and reset it in next tick.\n // see https://github.com/element-plus/element-plus/issues/8825\n textareaCalcStyle.value = {\n overflowY: 'hidden',\n ...textareaStyle,\n }\n\n nextTick(() => {\n // NOTE: Force repaint to make sure the style set above is applied.\n textarea.value!.offsetHeight\n textareaCalcStyle.value = textareaStyle\n })\n } else {\n textareaCalcStyle.value = {\n minHeight: calcTextareaHeight(textarea.value).minHeight,\n }\n }\n}\n\nconst createOnceInitResize = (resizeTextarea: () => void) => {\n let isInit = false\n return () => {\n if (isInit || !props.autosize) return\n const isElHidden = textarea.value?.offsetParent === null\n if (!isElHidden) {\n setTimeout(resizeTextarea)\n isInit = true\n }\n }\n}\n// fix: https://github.com/element-plus/element-plus/issues/12074\nconst onceInitSizeTextarea = createOnceInitResize(resizeTextarea)\n\nconst setNativeInputValue = () => {\n const input = _ref.value\n const formatterValue = props.formatter\n ? props.formatter(nativeInputValue.value)\n : nativeInputValue.value\n if (!input || input.value === formatterValue || props.type === 'file') return\n input.value = formatterValue\n}\n\nconst formatValue = (value: string) => {\n const { trim, number } = props.modelModifiers\n if (trim) {\n value = value.trim()\n }\n if (number) {\n value = `${looseToNumber(value)}`\n }\n if (props.formatter && props.parser) {\n value = props.parser(value)\n }\n return value\n}\n\nconst handleInput = async (event: Event) => {\n // should not emit input during composition\n // see: https://github.com/ElemeFE/element/issues/10516\n if (isComposing.value) return\n\n const { lazy } = props.modelModifiers\n let { value } = event.target as TargetElement\n let shouldForceNativeUpdate = false\n if (lazy) {\n emit(INPUT_EVENT, value)\n return\n }\n\n value = formatValue(value)\n\n if (props.countGraphemes && maxlength.value != null) {\n const limit = Number(maxlength.value)\n const graphemes = props.countGraphemes(value)\n const saveGraphemes = props.countGraphemes(saveValue.value)\n if (graphemes > limit && graphemes > saveGraphemes) {\n // If current value already exceeds limit, block further input and keep exceed state.\n if (saveGraphemes > limit) {\n value = saveValue.value\n shouldForceNativeUpdate = true\n } else {\n // Keep unchanged suffix like native maxlength behavior.\n // Instead of truncating from the end of the whole string,\n // only limit the inserted segment to available capacity.\n const prevValue = saveValue.value\n const nextValue = value\n let prefixLen = 0\n\n while (\n prefixLen < prevValue.length &&\n prefixLen < nextValue.length &&\n prevValue[prefixLen] === nextValue[prefixLen]\n ) {\n prefixLen++\n }\n\n let prevSuffixIndex = prevValue.length\n let nextSuffixIndex = nextValue.length\n while (\n prevSuffixIndex > prefixLen &&\n nextSuffixIndex > prefixLen &&\n prevValue[prevSuffixIndex - 1] === nextValue[nextSuffixIndex - 1]\n ) {\n prevSuffixIndex--\n nextSuffixIndex--\n }\n\n const before = nextValue.slice(0, prefixLen)\n const removed = prevValue.slice(prefixLen, prevSuffixIndex)\n const inserted = nextValue.slice(prefixLen, nextSuffixIndex)\n const after = nextValue.slice(nextSuffixIndex)\n\n const removedCount = props.countGraphemes(removed)\n const baseCount = saveGraphemes - removedCount\n const availableInserted = Math.max(0, limit - baseCount)\n\n let acceptedInserted = ''\n if (availableInserted > 0) {\n // Use Intl.Segmenter for proper grapheme cluster iteration if available.\n if (typeof Intl !== 'undefined' && 'Segmenter' in Intl) {\n const segmenter = new Intl.Segmenter(undefined, {\n granularity: 'grapheme',\n })\n for (const { segment } of segmenter.segment(inserted)) {\n const candidate = acceptedInserted + segment\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n } else {\n // Fallback to code-point iteration for older environments.\n for (const char of Array.from(inserted)) {\n const candidate = acceptedInserted + char\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n }\n }\n\n value = before + acceptedInserted + after\n shouldForceNativeUpdate = true\n }\n }\n }\n\n // hack for https://github.com/ElemeFE/element/issues/8548\n // should remove the following line when we don't support IE\n if (String(value) === nativeInputValue.value) {\n // preserve native features while being compatible with #9501\n if (props.formatter || shouldForceNativeUpdate) {\n const target = event.target as TargetElement\n const blockedValue = target.value\n const selectionStart = target.selectionStart\n const selectionEnd = target.selectionEnd\n setNativeInputValue()\n // Keep caret position stable when input is blocked and value is reset.\n if (\n shouldForceNativeUpdate &&\n _ref.value &&\n selectionStart != null &&\n selectionEnd != null\n ) {\n const restoredValue = _ref.value.value\n const afterTxt = blockedValue.slice(Math.max(0, selectionEnd))\n let caretPos = Math.min(selectionStart, restoredValue.length)\n\n if (afterTxt && restoredValue.endsWith(afterTxt)) {\n caretPos = restoredValue.length - afterTxt.length\n }\n\n _ref.value.setSelectionRange(caretPos, caretPos)\n }\n }\n return\n }\n saveValue.value = value\n\n recordCursor()\n emit(UPDATE_MODEL_EVENT, value)\n emit(INPUT_EVENT, value)\n\n // ensure native input value is controlled\n // see: https://github.com/ElemeFE/element/issues/12850\n await nextTick()\n\n if ((props.formatter && props.parser) || !hasModelModifiers.value) {\n setNativeInputValue()\n }\n setCursor()\n}\n\nconst handleChange = async (event: Event) => {\n let { value } = event.target as TargetElement\n\n value = formatValue(value)\n if (props.modelModifiers.lazy) {\n emit(UPDATE_MODEL_EVENT, value)\n }\n emit(CHANGE_EVENT, value, event)\n\n await nextTick()\n setNativeInputValue()\n}\n\nconst {\n isComposing,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n} = useComposition({ emit, afterComposition: handleInput })\n\nconst handlePasswordVisible = () => {\n passwordVisible.value = !passwordVisible.value\n}\n\nconst focus = () => _ref.value?.focus()\n\nconst blur = () => _ref.value?.blur()\n\nconst handleMouseLeave = (evt: MouseEvent) => {\n hovering.value = false\n emit('mouseleave', evt)\n}\n\nconst handleMouseEnter = (evt: MouseEvent) => {\n hovering.value = true\n emit('mouseenter', evt)\n}\n\nconst handleKeydown = (evt: KeyboardEvent) => {\n emit('keydown', evt)\n}\n\nconst select = () => {\n _ref.value?.select()\n}\n\nconst clear = (evt?: MouseEvent) => {\n emit(UPDATE_MODEL_EVENT, '')\n emit(CHANGE_EVENT, '')\n emit('clear', evt)\n emit(INPUT_EVENT, '')\n}\n\nwatch(\n () => props.modelValue,\n () => {\n nextTick(() => resizeTextarea())\n if (props.validateEvent) {\n elFormItem?.validate?.('change').catch(NOOP)\n }\n }\n)\n\nwatch(\n () => nativeInputValue.value,\n (val) => {\n saveValue.value = val\n },\n { immediate: true }\n)\n\n// native input value is set explicitly\n// do not use v-model / :value in template\n// see: https://github.com/ElemeFE/element/issues/14521\nwatch(nativeInputValue, (newValue) => {\n if (!_ref.value) {\n return\n }\n const { trim, number } = props.modelModifiers\n const elValue = _ref.value.value\n const displayValue =\n (number || props.type === 'number') && !/^0\\d/.test(elValue)\n ? `${looseToNumber(elValue)}`\n : elValue\n\n if (displayValue === newValue) {\n return\n }\n\n if (document.activeElement === _ref.value && _ref.value.type !== 'range') {\n if (trim && displayValue.trim() === newValue) {\n return\n }\n }\n\n setNativeInputValue()\n})\n\n// when change between <input> and <textarea>,\n// update DOM dependent value and styles\n// https://github.com/ElemeFE/element/issues/14857\nwatch(\n () => props.type,\n async () => {\n await nextTick()\n setNativeInputValue()\n resizeTextarea()\n }\n)\n\nonMounted(() => {\n if (!props.formatter && props.parser) {\n debugWarn(\n COMPONENT_NAME,\n 'If you set the parser, you also need to set the formatter.'\n )\n }\n setNativeInputValue()\n nextTick(resizeTextarea)\n})\n\ndefineExpose({\n /** @description HTML input element */\n input,\n /** @description HTML textarea element */\n textarea,\n /** @description HTML element, input or textarea */\n ref: _ref,\n /** @description style of textarea. */\n textareaStyle,\n\n /** @description from props (used on unit test) */\n autosize: toRef(props, 'autosize'),\n\n /** @description is input composing */\n isComposing,\n\n /** @description whether the password is visible */\n passwordVisible,\n\n /** @description HTML input element native method */\n focus,\n /** @description HTML input element native method */\n blur,\n /** @description HTML input element native method */\n select,\n /** @description clear input value */\n clear,\n /** @description resize textarea. */\n resizeTextarea,\n})\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"input2.js","names":[],"sources":["../../../../../../packages/components/input/src/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n containerKls,\n {\n [nsInput.bm('group', 'append')]: $slots.append,\n [nsInput.bm('group', 'prepend')]: $slots.prepend,\n },\n ]\"\n :style=\"containerStyle\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- input -->\n <template v-if=\"type !== 'textarea'\">\n <!-- prepend slot -->\n <div v-if=\"$slots.prepend\" :class=\"nsInput.be('group', 'prepend')\">\n <slot name=\"prepend\" />\n </div>\n\n <div ref=\"wrapperRef\" :class=\"wrapperKls\">\n <!-- prefix slot -->\n <span v-if=\"$slots.prefix || prefixIcon\" :class=\"nsInput.e('prefix')\">\n <span :class=\"nsInput.e('prefix-inner')\">\n <slot name=\"prefix\" />\n <el-icon v-if=\"prefixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </span>\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"input\"\n :class=\"nsInput.e('inner')\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :type=\"showPassword ? (passwordVisible ? 'text' : 'password') : type\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :tabindex=\"tabindex\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :style=\"inputStyle\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n\n <!-- suffix slot -->\n <span v-if=\"suffixVisible\" :class=\"nsInput.e('suffix')\">\n <span :class=\"nsInput.e('suffix-inner')\">\n <el-icon\n v-if=\"renderClear\"\n :class=\"[nsInput.e('icon'), nsInput.e('clear')]\"\n :style=\"{ visibility: showClear ? 'visible' : 'hidden' }\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <template\n v-if=\"!showClear || !showPwdVisible || !isWordLimitVisible\"\n >\n <slot name=\"suffix\" />\n <el-icon v-if=\"suffixIcon\" :class=\"nsInput.e('icon')\">\n <component :is=\"suffixIcon\" />\n </el-icon>\n </template>\n <el-icon\n v-if=\"showPwdVisible\"\n :class=\"[nsInput.e('icon'), nsInput.e('password')]\"\n @click=\"handlePasswordVisible\"\n @mousedown.prevent=\"NOOP\"\n @mouseup.prevent=\"NOOP\"\n >\n <slot name=\"password-icon\" :visible=\"passwordVisible\">\n <component :is=\"passwordIcon\" />\n </slot>\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n <span :class=\"nsInput.e('count-inner')\">\n {{ textLength }} / {{ maxlength }}\n </span>\n </span>\n <el-icon\n v-if=\"validateState && validateIcon && needStatusIcon\"\n :class=\"[\n nsInput.e('icon'),\n nsInput.e('validateIcon'),\n nsInput.is('loading', validateState === 'validating'),\n ]\"\n >\n <component :is=\"validateIcon\" />\n </el-icon>\n </span>\n </span>\n </div>\n\n <!-- append slot -->\n <div v-if=\"$slots.append\" :class=\"nsInput.be('group', 'append')\">\n <slot name=\"append\" />\n </div>\n </template>\n\n <!-- textarea -->\n <template v-else>\n <textarea\n :id=\"inputId\"\n ref=\"textarea\"\n :class=\"[\n nsTextarea.e('inner'),\n nsInput.is('focus', isFocused),\n nsTextarea.is('clearable', clearable),\n ]\"\n v-bind=\"attrs\"\n :name=\"name\"\n :minlength=\"countGraphemes ? undefined : minlength\"\n :maxlength=\"countGraphemes ? undefined : maxlength\"\n :tabindex=\"tabindex\"\n :disabled=\"inputDisabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :style=\"textareaStyle\"\n :aria-label=\"ariaLabel\"\n :placeholder=\"placeholder\"\n :form=\"form\"\n :autofocus=\"autofocus\"\n :rows=\"rows\"\n :role=\"containerRole\"\n :inputmode=\"inputmode\"\n @compositionstart=\"handleCompositionStart\"\n @compositionupdate=\"handleCompositionUpdate\"\n @compositionend=\"handleCompositionEnd\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @change=\"handleChange\"\n @keydown=\"handleKeydown\"\n />\n <el-icon\n v-if=\"showClear\"\n :class=\"[nsTextarea.e('icon'), nsTextarea.e('clear')]\"\n @mousedown.prevent=\"NOOP\"\n @click=\"clear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n <span\n v-if=\"isWordLimitVisible\"\n :style=\"countStyle\"\n :class=\"[\n nsInput.e('count'),\n nsInput.is('outside', wordLimitPosition === 'outside'),\n ]\"\n >\n {{ textLength }} / {{ maxlength }}\n </span>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n shallowRef,\n toRef,\n useAttrs as useRawAttrs,\n useSlots,\n watch,\n} from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { isNil } from 'lodash-unified'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { Hide, View } from '@element-plus/icons-vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport {\n NOOP,\n ValidateComponentsMap,\n debugWarn,\n isClient,\n isObject,\n} from '@element-plus/utils'\nimport {\n useAttrs,\n useComposition,\n useCursor,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { calcTextareaHeight, looseToNumber } from './utils'\nimport { inputEmits, inputPropsDefaults } from './input'\n\nimport type { StyleValue } from 'vue'\nimport type { InputProps } from './input'\n\ntype TargetElement = HTMLInputElement | HTMLTextAreaElement\n\nconst COMPONENT_NAME = 'ElInput'\ndefineOptions({\n name: COMPONENT_NAME,\n inheritAttrs: false,\n})\nconst props = withDefaults(defineProps<InputProps>(), inputPropsDefaults)\nconst emit = defineEmits(inputEmits)\n\nconst rawAttrs = useRawAttrs()\nconst slots = useSlots()\n\nconst containerKls = computed(() => [\n props.type === 'textarea' ? nsTextarea.b() : nsInput.b(),\n nsInput.m(inputSize.value),\n nsInput.is('disabled', inputDisabled.value),\n nsInput.is('exceed', inputExceed.value),\n {\n [nsInput.b('group')]: slots.prepend || slots.append,\n [nsInput.m('prefix')]: slots.prefix || props.prefixIcon,\n [nsInput.m('suffix')]:\n slots.suffix || props.suffixIcon || props.clearable || props.showPassword,\n [nsInput.bm('suffix', 'password-clear')]:\n showClear.value && showPwdVisible.value,\n [nsInput.b('hidden')]: props.type === 'hidden',\n },\n rawAttrs.class,\n])\n\nconst wrapperKls = computed(() => [\n nsInput.e('wrapper'),\n nsInput.is('focus', isFocused.value),\n])\n\nconst attrs = useAttrs()\nconst maxlength = computed(() => props.maxlength?.toString())\n\nconst { form: elForm, formItem: elFormItem } = useFormItem()\nconst { inputId } = useFormItemInputId(props, {\n formItemContext: elFormItem,\n})\nconst inputSize = useFormSize()\nconst inputDisabled = useFormDisabled()\nconst nsInput = useNamespace('input')\nconst nsTextarea = useNamespace('textarea')\n\nconst input = shallowRef<HTMLInputElement>()\nconst textarea = shallowRef<HTMLTextAreaElement>()\n\nconst hovering = ref(false)\nconst passwordVisible = ref(false)\nconst countStyle = ref<StyleValue>()\nconst textareaCalcStyle = shallowRef(props.inputStyle)\nconst saveValue = ref('')\n\nconst _ref = computed(() => input.value || textarea.value)\n\n// wrapperRef for type=\"text\", handleFocus and handleBlur for type=\"textarea\"\n// @ts-ignore - used in template ref binding, TS cannot detect template usage\nconst { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(\n _ref,\n {\n disabled: inputDisabled,\n afterBlur() {\n if (props.validateEvent) {\n elFormItem?.validate?.('blur').catch(NOOP)\n }\n },\n }\n)\n\nconst needStatusIcon = computed(() => elForm?.statusIcon ?? false)\nconst validateState = computed(() => elFormItem?.validateState || '')\nconst validateIcon = computed(\n () => validateState.value && ValidateComponentsMap[validateState.value]\n)\nconst passwordIcon = computed(() => (passwordVisible.value ? View : Hide))\nconst containerStyle = computed<StyleValue>(() => [\n rawAttrs.style as StyleValue,\n])\nconst textareaStyle = computed<StyleValue>(() => [\n props.inputStyle,\n textareaCalcStyle.value,\n { resize: props.resize },\n])\nconst nativeInputValue = computed(() =>\n isNil(props.modelValue) ? '' : String(props.modelValue)\n)\nconst renderClear = computed(\n () => props.clearable && !inputDisabled.value && !props.readonly\n)\nconst showClear = computed(\n () =>\n renderClear.value &&\n !!nativeInputValue.value &&\n (isFocused.value || hovering.value)\n)\nconst showPwdVisible = computed(\n () => props.showPassword && !inputDisabled.value && !!nativeInputValue.value\n)\nconst isWordLimitVisible = computed(\n () =>\n props.showWordLimit &&\n !!maxlength.value &&\n (props.type === 'text' || props.type === 'textarea') &&\n !inputDisabled.value &&\n !props.readonly &&\n !props.showPassword\n)\nconst textLength = computed(() => {\n if (props.countGraphemes && props.showWordLimit) {\n return props.countGraphemes(nativeInputValue.value)\n }\n return nativeInputValue.value.length\n})\nconst inputExceed = computed(\n () =>\n // show exceed style if length of initial value greater then maxlength\n !!isWordLimitVisible.value && textLength.value > Number(maxlength.value)\n)\nconst suffixVisible = computed(\n () =>\n !!slots.suffix ||\n !!props.suffixIcon ||\n props.clearable ||\n props.showPassword ||\n isWordLimitVisible.value ||\n (!!validateState.value && needStatusIcon.value)\n)\nconst hasModelModifiers = computed(\n () => !!Object.keys(props.modelModifiers).length\n)\n\nconst [recordCursor, setCursor] = useCursor(input)\n\nuseResizeObserver(textarea, (entries) => {\n onceInitSizeTextarea()\n if (\n !isWordLimitVisible.value ||\n (props.resize !== 'both' && props.resize !== 'horizontal')\n )\n return\n const entry = entries[0]\n const { width } = entry.contentRect\n countStyle.value = {\n /** right: 100% - width + padding(22) - right(10) */\n right: `calc(100% - ${width + 22 - 10}px)`,\n }\n})\n\nconst resizeTextarea = () => {\n const { type, autosize } = props\n\n if (!isClient || type !== 'textarea' || !textarea.value) return\n\n if (autosize) {\n const minRows = isObject(autosize) ? autosize.minRows : undefined\n const maxRows = isObject(autosize) ? autosize.maxRows : undefined\n const textareaStyle = calcTextareaHeight(textarea.value, minRows, maxRows)\n\n // If the scrollbar is displayed, the height of the textarea needs more space than the calculated height.\n // If set textarea height in this case, the scrollbar will not hide.\n // So we need to hide scrollbar first, and reset it in next tick.\n // see https://github.com/element-plus/element-plus/issues/8825\n textareaCalcStyle.value = {\n overflowY: 'hidden',\n ...textareaStyle,\n }\n\n nextTick(() => {\n // NOTE: Force repaint to make sure the style set above is applied.\n textarea.value!.offsetHeight\n textareaCalcStyle.value = textareaStyle\n })\n } else {\n textareaCalcStyle.value = {\n minHeight: calcTextareaHeight(textarea.value).minHeight,\n }\n }\n}\n\nconst createOnceInitResize = (resizeTextarea: () => void) => {\n let isInit = false\n return () => {\n if (isInit || !props.autosize) return\n const isElHidden = textarea.value?.offsetParent === null\n if (!isElHidden) {\n setTimeout(resizeTextarea)\n isInit = true\n }\n }\n}\n// fix: https://github.com/element-plus/element-plus/issues/12074\nconst onceInitSizeTextarea = createOnceInitResize(resizeTextarea)\n\nconst setNativeInputValue = () => {\n const input = _ref.value\n const formatterValue = props.formatter\n ? props.formatter(nativeInputValue.value)\n : nativeInputValue.value\n if (!input || input.value === formatterValue || props.type === 'file') return\n input.value = formatterValue\n}\n\nconst formatValue = (value: string) => {\n const { trim, number } = props.modelModifiers\n if (trim) {\n value = value.trim()\n }\n if (number) {\n value = `${looseToNumber(value)}`\n }\n if (props.formatter && props.parser) {\n value = props.parser(value)\n }\n return value\n}\n\nconst handleInput = async (event: Event) => {\n // should not emit input during composition\n // see: https://github.com/ElemeFE/element/issues/10516\n if (isComposing.value) return\n\n const { lazy } = props.modelModifiers\n let { value } = event.target as TargetElement\n let shouldForceNativeUpdate = false\n if (lazy) {\n emit(INPUT_EVENT, value)\n return\n }\n\n value = formatValue(value)\n\n if (props.countGraphemes && maxlength.value != null) {\n const limit = Number(maxlength.value)\n const graphemes = props.countGraphemes(value)\n const saveGraphemes = props.countGraphemes(saveValue.value)\n if (graphemes > limit && graphemes > saveGraphemes) {\n // If current value already exceeds limit, block further input and keep exceed state.\n if (saveGraphemes > limit) {\n value = saveValue.value\n shouldForceNativeUpdate = true\n } else {\n // Keep unchanged suffix like native maxlength behavior.\n // Instead of truncating from the end of the whole string,\n // only limit the inserted segment to available capacity.\n const prevValue = saveValue.value\n const nextValue = value\n let prefixLen = 0\n\n while (\n prefixLen < prevValue.length &&\n prefixLen < nextValue.length &&\n prevValue[prefixLen] === nextValue[prefixLen]\n ) {\n prefixLen++\n }\n\n let prevSuffixIndex = prevValue.length\n let nextSuffixIndex = nextValue.length\n while (\n prevSuffixIndex > prefixLen &&\n nextSuffixIndex > prefixLen &&\n prevValue[prevSuffixIndex - 1] === nextValue[nextSuffixIndex - 1]\n ) {\n prevSuffixIndex--\n nextSuffixIndex--\n }\n\n const before = nextValue.slice(0, prefixLen)\n const removed = prevValue.slice(prefixLen, prevSuffixIndex)\n const inserted = nextValue.slice(prefixLen, nextSuffixIndex)\n const after = nextValue.slice(nextSuffixIndex)\n\n const removedCount = props.countGraphemes(removed)\n const baseCount = saveGraphemes - removedCount\n const availableInserted = Math.max(0, limit - baseCount)\n\n let acceptedInserted = ''\n if (availableInserted > 0) {\n // Use Intl.Segmenter for proper grapheme cluster iteration if available.\n if (typeof Intl !== 'undefined' && 'Segmenter' in Intl) {\n const segmenter = new Intl.Segmenter(undefined, {\n granularity: 'grapheme',\n })\n for (const { segment } of segmenter.segment(inserted)) {\n const candidate = acceptedInserted + segment\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n } else {\n // Fallback to code-point iteration for older environments.\n for (const char of Array.from(inserted)) {\n const candidate = acceptedInserted + char\n const newCount = props.countGraphemes(candidate)\n if (newCount > availableInserted) break\n acceptedInserted = candidate\n }\n }\n }\n\n value = before + acceptedInserted + after\n shouldForceNativeUpdate = true\n }\n }\n }\n\n // hack for https://github.com/ElemeFE/element/issues/8548\n // should remove the following line when we don't support IE\n if (String(value) === nativeInputValue.value) {\n // preserve native features while being compatible with #9501\n if (props.formatter || shouldForceNativeUpdate) {\n const target = event.target as TargetElement\n const blockedValue = target.value\n const selectionStart = target.selectionStart\n const selectionEnd = target.selectionEnd\n setNativeInputValue()\n // Keep caret position stable when input is blocked and value is reset.\n if (\n shouldForceNativeUpdate &&\n _ref.value &&\n selectionStart != null &&\n selectionEnd != null\n ) {\n const restoredValue = _ref.value.value\n const afterTxt = blockedValue.slice(Math.max(0, selectionEnd))\n let caretPos = Math.min(selectionStart, restoredValue.length)\n\n if (afterTxt && restoredValue.endsWith(afterTxt)) {\n caretPos = restoredValue.length - afterTxt.length\n }\n\n _ref.value.setSelectionRange(caretPos, caretPos)\n }\n }\n return\n }\n saveValue.value = value\n\n recordCursor()\n emit(UPDATE_MODEL_EVENT, value)\n emit(INPUT_EVENT, value)\n\n // ensure native input value is controlled\n // see: https://github.com/ElemeFE/element/issues/12850\n await nextTick()\n\n if ((props.formatter && props.parser) || !hasModelModifiers.value) {\n setNativeInputValue()\n }\n setCursor()\n}\n\nconst handleChange = async (event: Event) => {\n let { value } = event.target as TargetElement\n\n value = formatValue(value)\n if (props.modelModifiers.lazy) {\n emit(UPDATE_MODEL_EVENT, value)\n }\n emit(CHANGE_EVENT, value, event)\n\n await nextTick()\n setNativeInputValue()\n}\n\nconst {\n isComposing,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n} = useComposition({ emit, afterComposition: handleInput })\n\nconst handlePasswordVisible = () => {\n passwordVisible.value = !passwordVisible.value\n}\n\nconst focus = () => _ref.value?.focus()\n\nconst blur = () => _ref.value?.blur()\n\nconst handleMouseLeave = (evt: MouseEvent) => {\n hovering.value = false\n emit('mouseleave', evt)\n}\n\nconst handleMouseEnter = (evt: MouseEvent) => {\n hovering.value = true\n emit('mouseenter', evt)\n}\n\nconst handleKeydown = (evt: KeyboardEvent) => {\n emit('keydown', evt)\n}\n\nconst select = () => {\n _ref.value?.select()\n}\n\nconst clear = (evt?: MouseEvent) => {\n emit(UPDATE_MODEL_EVENT, '')\n emit(CHANGE_EVENT, '')\n emit('clear', evt)\n emit(INPUT_EVENT, '')\n}\n\nwatch(\n () => props.modelValue,\n () => {\n nextTick(() => resizeTextarea())\n if (props.validateEvent) {\n elFormItem?.validate?.('change').catch(NOOP)\n }\n }\n)\n\nwatch(\n () => nativeInputValue.value,\n (val) => {\n saveValue.value = val\n },\n { immediate: true }\n)\n\n// native input value is set explicitly\n// do not use v-model / :value in template\n// see: https://github.com/ElemeFE/element/issues/14521\nwatch(nativeInputValue, (newValue) => {\n if (!_ref.value) {\n return\n }\n const { trim, number } = props.modelModifiers\n const elValue = _ref.value.value\n const displayValue =\n (number || props.type === 'number') && !/^0\\d/.test(elValue)\n ? `${looseToNumber(elValue)}`\n : elValue\n\n if (displayValue === newValue) {\n return\n }\n\n if (document.activeElement === _ref.value && _ref.value.type !== 'range') {\n if (trim && displayValue.trim() === newValue) {\n return\n }\n }\n\n setNativeInputValue()\n})\n\n// when change between <input> and <textarea>,\n// update DOM dependent value and styles\n// https://github.com/ElemeFE/element/issues/14857\nwatch(\n () => props.type,\n async () => {\n await nextTick()\n setNativeInputValue()\n resizeTextarea()\n }\n)\n\nonMounted(() => {\n if (!props.formatter && props.parser) {\n debugWarn(\n COMPONENT_NAME,\n 'If you set the parser, you also need to set the formatter.'\n )\n }\n setNativeInputValue()\n nextTick(resizeTextarea)\n})\n\ndefineExpose({\n /** @description HTML input element */\n input,\n /** @description HTML textarea element */\n textarea,\n /** @description HTML element, input or textarea */\n ref: _ref,\n /** @description style of textarea. */\n textareaStyle,\n\n /** @description from props (used on unit test) */\n autosize: toRef(props, 'autosize'),\n\n /** @description is input composing */\n isComposing,\n\n /** @description whether the password is visible */\n passwordVisible,\n\n /** @description HTML input element native method */\n focus,\n /** @description HTML input element native method */\n blur,\n /** @description HTML input element native method */\n select,\n /** @description clear input value */\n clear,\n /** @description resize textarea. */\n resizeTextarea,\n})\n</script>\n"],"mappings":""}
@@ -90,6 +90,14 @@ interface InputNumberProps {
90
90
  * @description whether to disable scientific notation input (e.g. 'e', 'E')
91
91
  */
92
92
  disabledScientific?: boolean;
93
+ /**
94
+ * @description specifies the format of the value presented in the input
95
+ */
96
+ formatter?: (value: string) => string;
97
+ /**
98
+ * @description specifies the value extracted from the formatted input
99
+ */
100
+ parser?: (value: string) => string;
93
101
  /**
94
102
  * @description same as `tabindex` in native input
95
103
  */
@@ -99,9 +107,21 @@ interface InputNumberProps {
99
107
  * @deprecated Removed after 3.0.0, Use `InputNumberProps` instead.
100
108
  */
101
109
  declare const inputNumberProps: {
102
- readonly inputmode: EpPropFinalized<(new (...args: any[]) => "text" | "email" | "search" | "tel" | "url" | "none" | "numeric" | "decimal") | (() => "text" | "email" | "search" | "tel" | "url" | "none" | "numeric" | "decimal" | undefined) | (((new (...args: any[]) => "text" | "email" | "search" | "tel" | "url" | "none" | "numeric" | "decimal") | (() => "text" | "email" | "search" | "tel" | "url" | "none" | "numeric" | "decimal" | undefined)) | null)[], unknown, unknown, undefined, boolean>;
110
+ readonly inputmode: EpPropFinalized<(new (...args: any[]) => "search" | "text" | "email" | "tel" | "url" | "none" | "numeric" | "decimal") | (() => "search" | "text" | "email" | "tel" | "url" | "none" | "numeric" | "decimal" | undefined) | (((new (...args: any[]) => "search" | "text" | "email" | "tel" | "url" | "none" | "numeric" | "decimal") | (() => "search" | "text" | "email" | "tel" | "url" | "none" | "numeric" | "decimal" | undefined)) | null)[], unknown, unknown, undefined, boolean>;
103
111
  readonly align: EpPropFinalized<(new (...args: any[]) => "center" | "left" | "right") | (() => "center" | "left" | "right") | (((new (...args: any[]) => "center" | "left" | "right") | (() => "center" | "left" | "right")) | null)[], unknown, unknown, "center", boolean>;
104
112
  readonly disabledScientific: BooleanConstructor;
113
+ readonly formatter: {
114
+ readonly type: vue.PropType<Function>;
115
+ readonly required: false;
116
+ readonly validator: ((val: unknown) => boolean) | undefined;
117
+ __epPropKey: true;
118
+ };
119
+ readonly parser: {
120
+ readonly type: vue.PropType<Function>;
121
+ readonly required: false;
122
+ readonly validator: ((val: unknown) => boolean) | undefined;
123
+ __epPropKey: true;
124
+ };
105
125
  readonly tabindex: EpPropFinalized<readonly [StringConstructor, NumberConstructor], unknown, unknown, 0, boolean>;
106
126
  readonly ariaLabel: StringConstructor;
107
127
  readonly id: EpPropFinalized<StringConstructor, unknown, unknown, undefined, boolean>;
@@ -74,6 +74,8 @@ const inputNumberProps = require_runtime$1.buildProps({
74
74
  default: "center"
75
75
  },
76
76
  disabledScientific: Boolean,
77
+ formatter: { type: Function },
78
+ parser: { type: Function },
77
79
  tabindex: {
78
80
  type: [String, Number],
79
81
  default: 0
@@ -1 +1 @@
1
- {"version":3,"file":"input-number.js","names":["buildProps","useSizeProp","definePropType","isNumber","useAriaProps","CHANGE_EVENT","INPUT_EVENT","UPDATE_MODEL_EVENT"],"sources":["../../../../../../packages/components/input-number/src/input-number.ts"],"sourcesContent":["import { isNil } from 'lodash-unified'\nimport { buildProps, definePropType, isNumber } from '@element-plus/utils'\nimport { useAriaProps, useSizeProp } from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\n\nimport type { ExtractPublicPropTypes, HTMLAttributes } from 'vue'\nimport type { ComponentSize } from '@element-plus/constants'\nimport type InputNumber from './input-number.vue'\n\n/**\n * @description input-number component props\n */\nexport interface InputNumberProps {\n /**\n * @description same as `id` in native input\n */\n id?: string\n /**\n * @description incremental step\n */\n step?: number\n /**\n * @description whether input value can only be multiple of step\n */\n stepStrictly?: boolean\n /**\n * @description the maximum allowed value\n */\n max?: number\n /**\n * @description the minimum allowed value\n */\n min?: number\n /**\n * @description binding value\n */\n modelValue?: number | null\n /**\n * @description same as `readonly` in native input\n */\n readonly?: boolean\n /**\n * @description whether the component is disabled\n */\n disabled?: boolean\n /**\n * @description size of the component\n */\n size?: ComponentSize\n /**\n * @description whether to enable the control buttons\n */\n controls?: boolean\n /**\n * @description position of the control buttons\n */\n controlsPosition?: '' | 'right'\n /**\n * @description value should be set when input box is cleared\n */\n valueOnClear?: 'min' | 'max' | number | null\n /**\n * @description same as `name` in native input\n */\n name?: string\n /**\n * @description same as `placeholder` in native input\n */\n placeholder?: string\n /**\n * @description precision of input value\n */\n precision?: number\n /**\n * @description whether to trigger form validation\n */\n validateEvent?: boolean\n /**\n * @description native aria-label attribute\n */\n ariaLabel?: string\n /**\n * @description native input mode for virtual keyboards\n */\n inputmode?: HTMLAttributes['inputmode']\n /**\n * @description alignment for the inner input text\n */\n align?: 'left' | 'right' | 'center'\n /**\n * @description whether to disable scientific notation input (e.g. 'e', 'E')\n */\n disabledScientific?: boolean\n /**\n * @description same as `tabindex` in native input\n */\n tabindex?: string | number\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `InputNumberProps` instead.\n */\nexport const inputNumberProps = buildProps({\n /**\n * @description same as `id` in native input\n */\n id: {\n type: String,\n default: undefined,\n },\n /**\n * @description incremental step\n */\n step: {\n type: Number,\n default: 1,\n },\n /**\n * @description whether input value can only be multiple of step\n */\n stepStrictly: Boolean,\n /**\n * @description the maximum allowed value\n */\n max: {\n type: Number,\n default: Number.MAX_SAFE_INTEGER,\n },\n /**\n * @description the minimum allowed value\n */\n min: {\n type: Number,\n default: Number.MIN_SAFE_INTEGER,\n },\n /**\n * @description binding value\n */\n modelValue: {\n type: [Number, null],\n },\n /**\n * @description same as `readonly` in native input\n */\n readonly: Boolean,\n /**\n * @description whether the component is disabled\n */\n disabled: {\n type: Boolean,\n default: undefined,\n },\n /**\n * @description size of the component\n */\n size: useSizeProp,\n /**\n * @description whether to enable the control buttons\n */\n controls: {\n type: Boolean,\n default: true,\n },\n /**\n * @description position of the control buttons\n */\n controlsPosition: {\n type: String,\n default: '',\n values: ['', 'right'],\n },\n /**\n * @description value should be set when input box is cleared\n */\n valueOnClear: {\n type: definePropType<'min' | 'max' | number | null>([String, Number, null]),\n validator: (val: 'min' | 'max' | number | null) =>\n val === null || isNumber(val) || ['min', 'max'].includes(val),\n default: null,\n },\n /**\n * @description same as `name` in native input\n */\n name: String,\n /**\n * @description same as `placeholder` in native input\n */\n placeholder: String,\n /**\n * @description precision of input value\n */\n precision: {\n type: Number,\n validator: (val: number) =>\n val >= 0 && val === Number.parseInt(`${val}`, 10),\n },\n /**\n * @description whether to trigger form validation\n */\n validateEvent: {\n type: Boolean,\n default: true,\n },\n ...useAriaProps(['ariaLabel']),\n /**\n * @description native input mode for virtual keyboards\n */\n inputmode: {\n type: definePropType<HTMLAttributes['inputmode']>(String),\n default: undefined,\n },\n /**\n * @description alignment for the inner input text\n */\n align: {\n type: definePropType<'left' | 'right' | 'center'>(String),\n default: 'center',\n },\n /**\n * @description whether to disable scientific notation input (e.g. 'e', 'E')\n */\n disabledScientific: Boolean,\n /**\n * @description same as `tabindex` in native input\n */\n tabindex: {\n type: [String, Number],\n default: 0,\n },\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `InputNumberProps` instead.\n */\nexport type InputNumberPropsPublic = ExtractPublicPropTypes<\n typeof inputNumberProps\n>\n\nexport const inputNumberEmits = {\n [CHANGE_EVENT]: (cur: number | undefined, prev: number | undefined) =>\n prev !== cur,\n blur: (e: FocusEvent) => e instanceof FocusEvent,\n focus: (e: FocusEvent) => e instanceof FocusEvent,\n [INPUT_EVENT]: (val: number | null | undefined) =>\n isNumber(val) || isNil(val),\n [UPDATE_MODEL_EVENT]: (val: number | undefined) =>\n isNumber(val) || isNil(val),\n}\nexport type InputNumberEmits = typeof inputNumberEmits\n\nexport type InputNumberInstance = InstanceType<typeof InputNumber> & unknown\n"],"mappings":";;;;;;;;;;;;;AA0GA,MAAa,mBAAmBA,6BAAW;CAIzC,IAAI;EACF,MAAM;EACN,SAAS;EACV;CAID,MAAM;EACJ,MAAM;EACN,SAAS;EACV;CAID,cAAc;CAId,KAAK;EACH,MAAM;EACN,SAAS,OAAO;EACjB;CAID,KAAK;EACH,MAAM;EACN,SAAS,OAAO;EACjB;CAID,YAAY,EACV,MAAM,CAAC,QAAQ,KAAK,EACrB;CAID,UAAU;CAIV,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,MAAMC;CAIN,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,kBAAkB;EAChB,MAAM;EACN,SAAS;EACT,QAAQ,CAAC,IAAI,QAAQ;EACtB;CAID,cAAc;EACZ,MAAMC,iCAA8C;GAAC;GAAQ;GAAQ;GAAK,CAAC;EAC3E,YAAY,QACV,QAAQ,QAAQC,uBAAS,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,SAAS,IAAI;EAC/D,SAAS;EACV;CAID,MAAM;CAIN,aAAa;CAIb,WAAW;EACT,MAAM;EACN,YAAY,QACV,OAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,OAAO,GAAG;EACpD;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CACD,GAAGC,6BAAa,CAAC,YAAY,CAAC;CAI9B,WAAW;EACT,MAAMF,iCAA4C,OAAO;EACzD,SAAS;EACV;CAID,OAAO;EACL,MAAMA,iCAA4C,OAAO;EACzD,SAAS;EACV;CAID,oBAAoB;CAIpB,UAAU;EACR,MAAM,CAAC,QAAQ,OAAO;EACtB,SAAS;EACV;CACF,CAAU;AASX,MAAa,mBAAmB;EAC7BG,8BAAgB,KAAyB,SACxC,SAAS;CACX,OAAO,MAAkB,aAAa;CACtC,QAAQ,MAAkB,aAAa;EACtCC,6BAAe,QACdH,uBAAS,IAAI,8BAAU,IAAI;EAC5BI,oCAAsB,QACrBJ,uBAAS,IAAI,8BAAU,IAAI;CAC9B"}
1
+ {"version":3,"file":"input-number.js","names":["buildProps","useSizeProp","definePropType","isNumber","useAriaProps","CHANGE_EVENT","INPUT_EVENT","UPDATE_MODEL_EVENT"],"sources":["../../../../../../packages/components/input-number/src/input-number.ts"],"sourcesContent":["import { isNil } from 'lodash-unified'\nimport { buildProps, definePropType, isNumber } from '@element-plus/utils'\nimport { useAriaProps, useSizeProp } from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\n\nimport type { ExtractPublicPropTypes, HTMLAttributes } from 'vue'\nimport type { ComponentSize } from '@element-plus/constants'\nimport type InputNumber from './input-number.vue'\n\n/**\n * @description input-number component props\n */\nexport interface InputNumberProps {\n /**\n * @description same as `id` in native input\n */\n id?: string\n /**\n * @description incremental step\n */\n step?: number\n /**\n * @description whether input value can only be multiple of step\n */\n stepStrictly?: boolean\n /**\n * @description the maximum allowed value\n */\n max?: number\n /**\n * @description the minimum allowed value\n */\n min?: number\n /**\n * @description binding value\n */\n modelValue?: number | null\n /**\n * @description same as `readonly` in native input\n */\n readonly?: boolean\n /**\n * @description whether the component is disabled\n */\n disabled?: boolean\n /**\n * @description size of the component\n */\n size?: ComponentSize\n /**\n * @description whether to enable the control buttons\n */\n controls?: boolean\n /**\n * @description position of the control buttons\n */\n controlsPosition?: '' | 'right'\n /**\n * @description value should be set when input box is cleared\n */\n valueOnClear?: 'min' | 'max' | number | null\n /**\n * @description same as `name` in native input\n */\n name?: string\n /**\n * @description same as `placeholder` in native input\n */\n placeholder?: string\n /**\n * @description precision of input value\n */\n precision?: number\n /**\n * @description whether to trigger form validation\n */\n validateEvent?: boolean\n /**\n * @description native aria-label attribute\n */\n ariaLabel?: string\n /**\n * @description native input mode for virtual keyboards\n */\n inputmode?: HTMLAttributes['inputmode']\n /**\n * @description alignment for the inner input text\n */\n align?: 'left' | 'right' | 'center'\n /**\n * @description whether to disable scientific notation input (e.g. 'e', 'E')\n */\n disabledScientific?: boolean\n /**\n * @description specifies the format of the value presented in the input\n */\n formatter?: (value: string) => string\n /**\n * @description specifies the value extracted from the formatted input\n */\n parser?: (value: string) => string\n /**\n * @description same as `tabindex` in native input\n */\n tabindex?: string | number\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `InputNumberProps` instead.\n */\nexport const inputNumberProps = buildProps({\n /**\n * @description same as `id` in native input\n */\n id: {\n type: String,\n default: undefined,\n },\n /**\n * @description incremental step\n */\n step: {\n type: Number,\n default: 1,\n },\n /**\n * @description whether input value can only be multiple of step\n */\n stepStrictly: Boolean,\n /**\n * @description the maximum allowed value\n */\n max: {\n type: Number,\n default: Number.MAX_SAFE_INTEGER,\n },\n /**\n * @description the minimum allowed value\n */\n min: {\n type: Number,\n default: Number.MIN_SAFE_INTEGER,\n },\n /**\n * @description binding value\n */\n modelValue: {\n type: [Number, null],\n },\n /**\n * @description same as `readonly` in native input\n */\n readonly: Boolean,\n /**\n * @description whether the component is disabled\n */\n disabled: {\n type: Boolean,\n default: undefined,\n },\n /**\n * @description size of the component\n */\n size: useSizeProp,\n /**\n * @description whether to enable the control buttons\n */\n controls: {\n type: Boolean,\n default: true,\n },\n /**\n * @description position of the control buttons\n */\n controlsPosition: {\n type: String,\n default: '',\n values: ['', 'right'],\n },\n /**\n * @description value should be set when input box is cleared\n */\n valueOnClear: {\n type: definePropType<'min' | 'max' | number | null>([String, Number, null]),\n validator: (val: 'min' | 'max' | number | null) =>\n val === null || isNumber(val) || ['min', 'max'].includes(val),\n default: null,\n },\n /**\n * @description same as `name` in native input\n */\n name: String,\n /**\n * @description same as `placeholder` in native input\n */\n placeholder: String,\n /**\n * @description precision of input value\n */\n precision: {\n type: Number,\n validator: (val: number) =>\n val >= 0 && val === Number.parseInt(`${val}`, 10),\n },\n /**\n * @description whether to trigger form validation\n */\n validateEvent: {\n type: Boolean,\n default: true,\n },\n ...useAriaProps(['ariaLabel']),\n /**\n * @description native input mode for virtual keyboards\n */\n inputmode: {\n type: definePropType<HTMLAttributes['inputmode']>(String),\n default: undefined,\n },\n /**\n * @description alignment for the inner input text\n */\n align: {\n type: definePropType<'left' | 'right' | 'center'>(String),\n default: 'center',\n },\n /**\n * @description whether to disable scientific notation input (e.g. 'e', 'E')\n */\n disabledScientific: Boolean,\n /**\n * @description specifies the format of the value presented in the input\n */\n formatter: {\n type: Function,\n },\n /**\n * @description specifies the value extracted from the formatted input\n */\n parser: {\n type: Function,\n },\n /**\n * @description same as `tabindex` in native input\n */\n tabindex: {\n type: [String, Number],\n default: 0,\n },\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `InputNumberProps` instead.\n */\nexport type InputNumberPropsPublic = ExtractPublicPropTypes<\n typeof inputNumberProps\n>\n\nexport const inputNumberEmits = {\n [CHANGE_EVENT]: (cur: number | undefined, prev: number | undefined) =>\n prev !== cur,\n blur: (e: FocusEvent) => e instanceof FocusEvent,\n focus: (e: FocusEvent) => e instanceof FocusEvent,\n [INPUT_EVENT]: (val: number | null | undefined) =>\n isNumber(val) || isNil(val),\n [UPDATE_MODEL_EVENT]: (val: number | undefined) =>\n isNumber(val) || isNil(val),\n}\nexport type InputNumberEmits = typeof inputNumberEmits\n\nexport type InputNumberInstance = InstanceType<typeof InputNumber> & unknown\n"],"mappings":";;;;;;;;;;;;;AAkHA,MAAa,mBAAmBA,6BAAW;CAIzC,IAAI;EACF,MAAM;EACN,SAAS;EACV;CAID,MAAM;EACJ,MAAM;EACN,SAAS;EACV;CAID,cAAc;CAId,KAAK;EACH,MAAM;EACN,SAAS,OAAO;EACjB;CAID,KAAK;EACH,MAAM;EACN,SAAS,OAAO;EACjB;CAID,YAAY,EACV,MAAM,CAAC,QAAQ,KAAK,EACrB;CAID,UAAU;CAIV,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,MAAMC;CAIN,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,kBAAkB;EAChB,MAAM;EACN,SAAS;EACT,QAAQ,CAAC,IAAI,QAAQ;EACtB;CAID,cAAc;EACZ,MAAMC,iCAA8C;GAAC;GAAQ;GAAQ;GAAK,CAAC;EAC3E,YAAY,QACV,QAAQ,QAAQC,uBAAS,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,SAAS,IAAI;EAC/D,SAAS;EACV;CAID,MAAM;CAIN,aAAa;CAIb,WAAW;EACT,MAAM;EACN,YAAY,QACV,OAAO,KAAK,QAAQ,OAAO,SAAS,GAAG,OAAO,GAAG;EACpD;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CACD,GAAGC,6BAAa,CAAC,YAAY,CAAC;CAI9B,WAAW;EACT,MAAMF,iCAA4C,OAAO;EACzD,SAAS;EACV;CAID,OAAO;EACL,MAAMA,iCAA4C,OAAO;EACzD,SAAS;EACV;CAID,oBAAoB;CAIpB,WAAW,EACT,MAAM,UACP;CAID,QAAQ,EACN,MAAM,UACP;CAID,UAAU;EACR,MAAM,CAAC,QAAQ,OAAO;EACtB,SAAS;EACV;CACF,CAAU;AASX,MAAa,mBAAmB;EAC7BG,8BAAgB,KAAyB,SACxC,SAAS;CACX,OAAO,MAAkB,aAAa;CACtC,QAAQ,MAAkB,aAAa;EACtCC,6BAAe,QACdH,uBAAS,IAAI,8BAAU,IAAI;EAC5BI,oCAAsB,QACrBJ,uBAAS,IAAI,8BAAU,IAAI;CAC9B"}
@@ -16,24 +16,24 @@ declare const __VLS_base: vue.DefineComponent<InputNumberProps, {
16
16
  /** @description get focus the input component */focus: () => void; /** @description remove focus the input component */
17
17
  blur: () => void;
18
18
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
19
- blur: (e: FocusEvent) => void;
20
- focus: (e: FocusEvent) => void;
21
- change: (cur: number | undefined, prev: number | undefined) => void;
22
19
  "update:modelValue": (val: number | undefined) => void;
20
+ focus: (e: FocusEvent) => void;
21
+ blur: (e: FocusEvent) => void;
23
22
  input: (val: number | null | undefined) => void;
23
+ change: (cur: number | undefined, prev: number | undefined) => void;
24
24
  }, string, vue.PublicProps, Readonly<InputNumberProps> & Readonly<{
25
- onChange?: ((cur: number | undefined, prev: number | undefined) => any) | undefined;
26
- onBlur?: ((e: FocusEvent) => any) | undefined;
27
- onFocus?: ((e: FocusEvent) => any) | undefined;
28
- onInput?: ((val: number | null | undefined) => any) | undefined;
29
25
  "onUpdate:modelValue"?: ((val: number | undefined) => any) | undefined;
26
+ onInput?: ((val: number | null | undefined) => any) | undefined;
27
+ onFocus?: ((e: FocusEvent) => any) | undefined;
28
+ onBlur?: ((e: FocusEvent) => any) | undefined;
29
+ onChange?: ((cur: number | undefined, prev: number | undefined) => any) | undefined;
30
30
  }>, {
31
31
  id: string;
32
32
  disabled: boolean;
33
33
  readonly: boolean;
34
34
  tabindex: string | number;
35
35
  validateEvent: boolean;
36
- inputmode: "text" | "email" | "search" | "tel" | "url" | "none" | "numeric" | "decimal";
36
+ inputmode: "search" | "text" | "email" | "tel" | "url" | "none" | "numeric" | "decimal";
37
37
  max: number;
38
38
  valueOnClear: "min" | "max" | number | null;
39
39
  min: number;
@@ -123,7 +123,7 @@ var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (
123
123
  const verifyValue = (value, update) => {
124
124
  const { max, min, step, precision, stepStrictly, valueOnClear } = props;
125
125
  if (max < min) require_error.throwError("InputNumber", "min should not be greater than max.");
126
- let newVal = Number(value);
126
+ let newVal = !value ? Number(value) : Number.parseFloat(String(value));
127
127
  if ((0, lodash_unified.isNil)(value) || Number.isNaN(newVal)) return null;
128
128
  if (value === "") {
129
129
  if (valueOnClear === null) return null;
@@ -159,13 +159,14 @@ var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (
159
159
  };
160
160
  const handleInput = (value) => {
161
161
  data.userInput = value;
162
- const newVal = value === "" ? null : Number(value);
162
+ let newVal = value === "" ? null : Number.parseFloat(value);
163
+ if (Number.isNaN(newVal)) newVal = null;
163
164
  emit(require_event.INPUT_EVENT, newVal);
164
165
  setCurrentValue(newVal, false);
165
166
  };
166
167
  const handleInputChange = (value) => {
167
- const newVal = value !== "" ? Number(value) : "";
168
- if (require_types.isNumber(newVal) && !Number.isNaN(newVal) || value === "") setCurrentValue(newVal);
168
+ const newVal = value !== "" ? Number.parseFloat(value) : "";
169
+ if (require_types.isNumber(newVal) && !Number.isNaN(newVal) || props.formatter && Number.isNaN(newVal) || newVal === "") setCurrentValue(newVal);
169
170
  setCurrentValueToModelValue();
170
171
  data.userInput = null;
171
172
  };
@@ -180,7 +181,7 @@ var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (
180
181
  };
181
182
  const handleBlur = (event) => {
182
183
  data.userInput = null;
183
- if (data.currentValue === null && input.value?.input) input.value.input.value = "";
184
+ if (data.currentValue === null && input.value?.input) input.value.input.value = props.formatter?.("") ?? "";
184
185
  emit("blur", event);
185
186
  if (props.validateEvent) formItem?.validate?.("blur").catch(_vue_shared.NOOP);
186
187
  };
@@ -257,7 +258,7 @@ var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (
257
258
  id: __props.id,
258
259
  ref_key: "input",
259
260
  ref: input,
260
- type: "number",
261
+ type: __props.formatter ? "text" : "number",
261
262
  step: __props.step,
262
263
  "model-value": displayValue.value,
263
264
  placeholder: __props.placeholder,
@@ -270,6 +271,8 @@ var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (
270
271
  "aria-label": __props.ariaLabel,
271
272
  "validate-event": false,
272
273
  inputmode: __props.inputmode,
274
+ formatter: __props.formatter,
275
+ parser: __props.parser,
273
276
  tabindex: __props.tabindex,
274
277
  onKeydown: handleKeydown,
275
278
  onBlur: handleBlur,
@@ -286,6 +289,7 @@ var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (
286
289
  key: "1"
287
290
  } : void 0]), 1032, [
288
291
  "id",
292
+ "type",
289
293
  "step",
290
294
  "model-value",
291
295
  "placeholder",
@@ -297,6 +301,8 @@ var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (
297
301
  "name",
298
302
  "aria-label",
299
303
  "inputmode",
304
+ "formatter",
305
+ "parser",
300
306
  "tabindex"
301
307
  ])
302
308
  ], 34);
@@ -1 +1 @@
1
- {"version":3,"file":"input-number.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../../../packages/components/input-number/src/input-number.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n ns.b(),\n ns.m(inputNumberSize),\n ns.is('disabled', inputNumberDisabled),\n ns.is('without-controls', !controls),\n ns.is('controls-right', controlsAtRight),\n ns.is(align, !!align),\n ]\"\n @dragstart.prevent\n >\n <span\n v-if=\"controls\"\n v-repeat-click=\"decrease\"\n role=\"button\"\n :aria-label=\"t('el.inputNumber.decrease')\"\n :class=\"[ns.e('decrease'), ns.is('disabled', minDisabled)]\"\n @keydown.enter=\"decrease\"\n >\n <slot name=\"decrease-icon\">\n <el-icon>\n <arrow-down v-if=\"controlsAtRight\" />\n <minus v-else />\n </el-icon>\n </slot>\n </span>\n <span\n v-if=\"controls\"\n v-repeat-click=\"increase\"\n role=\"button\"\n :aria-label=\"t('el.inputNumber.increase')\"\n :class=\"[ns.e('increase'), ns.is('disabled', maxDisabled)]\"\n @keydown.enter=\"increase\"\n >\n <slot name=\"increase-icon\">\n <el-icon>\n <arrow-up v-if=\"controlsAtRight\" />\n <plus v-else />\n </el-icon>\n </slot>\n </span>\n <el-input\n :id=\"id\"\n ref=\"input\"\n type=\"number\"\n :step=\"step\"\n :model-value=\"displayValue\"\n :placeholder=\"placeholder\"\n :readonly=\"readonly\"\n :disabled=\"inputNumberDisabled\"\n :size=\"inputNumberSize\"\n :max=\"max\"\n :min=\"min\"\n :name=\"name\"\n :aria-label=\"ariaLabel\"\n :validate-event=\"false\"\n :inputmode=\"inputmode\"\n :tabindex=\"tabindex\"\n @keydown=\"handleKeydown\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n @input=\"handleInput\"\n @change=\"handleInputChange\"\n >\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template v-if=\"$slots.suffix\" #suffix>\n <slot name=\"suffix\" />\n </template>\n </el-input>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUpdated, reactive, ref, watch } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { ElInput } from '@element-plus/components/input'\nimport { ElIcon } from '@element-plus/components/icon'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport { vRepeatClick } from '@element-plus/directives'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport {\n NOOP,\n debugWarn,\n getEventCode,\n getEventKey,\n isNumber,\n isString,\n isUndefined,\n throwError,\n} from '@element-plus/utils'\nimport { ArrowDown, ArrowUp, Minus, Plus } from '@element-plus/icons-vue'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { inputNumberEmits } from './input-number'\n\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { InputNumberProps } from './input-number'\n\ndefineOptions({\n name: 'ElInputNumber',\n})\n\nconst props = withDefaults(defineProps<InputNumberProps>(), {\n id: undefined,\n disabled: undefined,\n step: 1,\n max: Number.MAX_SAFE_INTEGER,\n min: Number.MIN_SAFE_INTEGER,\n stepStrictly: false,\n readonly: false,\n controls: true,\n controlsPosition: '',\n valueOnClear: null,\n validateEvent: true,\n inputmode: undefined,\n align: 'center',\n tabindex: 0,\n})\nconst emit = defineEmits(inputNumberEmits)\n\nconst { t } = useLocale()\nconst ns = useNamespace('input-number')\nconst input = ref<InputInstance>()\n\ninterface Data {\n currentValue: number | null | undefined\n userInput: null | number | string\n}\nconst data = reactive<Data>({\n currentValue: props.modelValue,\n userInput: null,\n})\n\nconst { formItem } = useFormItem()\n\nconst minDisabled = computed(\n () => isNumber(props.modelValue) && props.modelValue <= props.min\n)\nconst maxDisabled = computed(\n () => isNumber(props.modelValue) && props.modelValue >= props.max\n)\n\nconst numPrecision = computed(() => {\n const stepPrecision = getPrecision(props.step)\n if (!isUndefined(props.precision)) {\n if (stepPrecision > props.precision) {\n debugWarn(\n 'InputNumber',\n 'precision should not be less than the decimal places of step'\n )\n }\n return props.precision\n } else {\n return Math.max(getPrecision(props.modelValue), stepPrecision)\n }\n})\nconst controlsAtRight = computed(() => {\n return props.controls && props.controlsPosition === 'right'\n})\n\nconst inputNumberSize = useFormSize()\nconst inputNumberDisabled = useFormDisabled()\n\nconst displayValue = computed(() => {\n if (data.userInput !== null) {\n return data.userInput\n }\n let currentValue: number | string | undefined | null = data.currentValue\n if (isNil(currentValue)) return ''\n if (isNumber(currentValue)) {\n if (Number.isNaN(currentValue)) return ''\n if (!isUndefined(props.precision)) {\n currentValue = currentValue.toFixed(props.precision)\n }\n }\n return currentValue\n})\nconst toPrecision = (num: number, pre?: number) => {\n if (isUndefined(pre)) pre = numPrecision.value\n if (pre === 0) return Math.round(num)\n let snum = String(num)\n const pointPos = snum.indexOf('.')\n if (pointPos === -1) return num\n const nums = snum.replace('.', '').split('')\n const datum = nums[pointPos + pre]\n if (!datum) return num\n const length = snum.length\n if (snum.charAt(length - 1) === '5') {\n snum = `${snum.slice(0, Math.max(0, length - 1))}6`\n }\n return Number.parseFloat(Number(snum).toFixed(pre))\n}\nconst getPrecision = (value: number | null | undefined) => {\n if (isNil(value)) return 0\n const valueString = value.toString()\n const dotPosition = valueString.indexOf('.')\n let precision = 0\n if (dotPosition !== -1) {\n precision = valueString.length - dotPosition - 1\n }\n return precision\n}\nconst ensurePrecision = (val: number, coefficient: 1 | -1 = 1) => {\n if (!isNumber(val)) return data.currentValue\n if (val >= Number.MAX_SAFE_INTEGER && coefficient === 1) {\n debugWarn(\n 'InputNumber',\n 'The value has reached the maximum safe integer limit.'\n )\n return val\n } else if (val <= Number.MIN_SAFE_INTEGER && coefficient === -1) {\n debugWarn(\n 'InputNumber',\n 'The value has reached the minimum safe integer limit.'\n )\n return val\n }\n\n // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n return toPrecision(val + props.step * coefficient)\n}\nconst handleKeydown = (event: KeyboardEvent | Event) => {\n const code = getEventCode(event as KeyboardEvent)\n const key = getEventKey(event as KeyboardEvent)\n\n if (props.disabledScientific && ['e', 'E'].includes(key)) {\n event.preventDefault()\n return\n }\n\n switch (code) {\n case EVENT_CODE.up: {\n event.preventDefault()\n increase()\n break\n }\n case EVENT_CODE.down: {\n event.preventDefault()\n decrease()\n break\n }\n }\n}\nconst increase = () => {\n if (props.readonly || inputNumberDisabled.value || maxDisabled.value) return\n const value = Number(displayValue.value) || 0\n const newVal = ensurePrecision(value)\n setCurrentValue(newVal)\n emit(INPUT_EVENT, data.currentValue)\n setCurrentValueToModelValue()\n}\nconst decrease = () => {\n if (props.readonly || inputNumberDisabled.value || minDisabled.value) return\n const value = Number(displayValue.value) || 0\n const newVal = ensurePrecision(value, -1)\n setCurrentValue(newVal)\n emit(INPUT_EVENT, data.currentValue)\n setCurrentValueToModelValue()\n}\nconst verifyValue = (\n value: number | string | null | undefined,\n update?: boolean\n): number | null | undefined => {\n const { max, min, step, precision, stepStrictly, valueOnClear } = props\n if (max < min) {\n throwError('InputNumber', 'min should not be greater than max.')\n }\n let newVal = Number(value)\n if (isNil(value) || Number.isNaN(newVal)) {\n return null\n }\n if (value === '') {\n if (valueOnClear === null) {\n return null\n }\n newVal = isString(valueOnClear) ? { min, max }[valueOnClear] : valueOnClear\n }\n if (stepStrictly) {\n newVal = toPrecision(\n Math.round(toPrecision(newVal / step)) * step,\n precision\n )\n if (newVal !== value) {\n update && emit(UPDATE_MODEL_EVENT, newVal)\n }\n }\n if (!isUndefined(precision)) {\n newVal = toPrecision(newVal, precision)\n }\n if (newVal > max || newVal < min) {\n newVal = newVal > max ? max : min\n update && emit(UPDATE_MODEL_EVENT, newVal)\n }\n return newVal\n}\nconst setCurrentValue = (\n value: number | string | null | undefined,\n emitChange = true\n) => {\n const oldVal = data.currentValue\n const newVal = verifyValue(value)\n if (!emitChange) {\n emit(UPDATE_MODEL_EVENT, newVal!)\n return\n }\n data.userInput = null\n if (oldVal === newVal && value) return\n emit(UPDATE_MODEL_EVENT, newVal!)\n if (oldVal !== newVal) {\n emit(CHANGE_EVENT, newVal!, oldVal!)\n }\n if (props.validateEvent) {\n formItem?.validate?.('change').catch(NOOP)\n }\n data.currentValue = newVal\n}\nconst handleInput = (value: string) => {\n data.userInput = value\n const newVal = value === '' ? null : Number(value)\n emit(INPUT_EVENT, newVal)\n setCurrentValue(newVal, false)\n}\nconst handleInputChange = (value: string) => {\n const newVal = value !== '' ? Number(value) : ''\n if ((isNumber(newVal) && !Number.isNaN(newVal)) || value === '') {\n setCurrentValue(newVal)\n }\n setCurrentValueToModelValue()\n data.userInput = null\n}\n\nconst focus = () => {\n input.value?.focus?.()\n}\n\nconst blur = () => {\n input.value?.blur?.()\n}\n\nconst handleFocus = (event: MouseEvent | FocusEvent) => {\n emit('focus', event)\n}\n\nconst handleBlur = (event: MouseEvent | FocusEvent) => {\n data.userInput = null\n // When non-numeric content is entered into a numeric input box,\n // the content displayed on the page is not cleared after the value is cleared. #18533\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1398528\n if (data.currentValue === null && input.value?.input) {\n input.value.input.value = ''\n }\n emit('blur', event)\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch(NOOP)\n }\n}\n\nconst setCurrentValueToModelValue = () => {\n if (data.currentValue !== props.modelValue) {\n data.currentValue = props.modelValue\n }\n}\nconst handleWheel = (e: WheelEvent) => {\n if (document.activeElement === e.target) e.preventDefault()\n}\n\nwatch(\n () => props.modelValue,\n (value, oldValue) => {\n const newValue = verifyValue(value, true)\n if (data.userInput === null && newValue !== oldValue) {\n data.currentValue = newValue\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.precision,\n () => {\n data.currentValue = verifyValue(props.modelValue)\n }\n)\nonMounted(() => {\n const { min, max, modelValue } = props\n const innerInput = input.value?.input as HTMLInputElement\n innerInput.setAttribute('role', 'spinbutton')\n if (Number.isFinite(max)) {\n innerInput.setAttribute('aria-valuemax', String(max))\n } else {\n innerInput.removeAttribute('aria-valuemax')\n }\n if (Number.isFinite(min)) {\n innerInput.setAttribute('aria-valuemin', String(min))\n } else {\n innerInput.removeAttribute('aria-valuemin')\n }\n innerInput.setAttribute(\n 'aria-valuenow',\n data.currentValue || data.currentValue === 0\n ? String(data.currentValue)\n : ''\n )\n innerInput.setAttribute('aria-disabled', String(inputNumberDisabled.value))\n if (!isNumber(modelValue) && modelValue != null) {\n let val: number | null = Number(modelValue)\n if (Number.isNaN(val)) {\n val = null\n }\n emit(UPDATE_MODEL_EVENT, val!)\n }\n innerInput.addEventListener('wheel', handleWheel, { passive: false })\n})\nonUpdated(() => {\n const innerInput = input.value?.input\n innerInput?.setAttribute('aria-valuenow', `${data.currentValue ?? ''}`)\n})\ndefineExpose({\n /** @description get focus the input component */\n focus,\n /** @description remove focus the input component */\n blur,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"input-number.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../../../packages/components/input-number/src/input-number.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n ns.b(),\n ns.m(inputNumberSize),\n ns.is('disabled', inputNumberDisabled),\n ns.is('without-controls', !controls),\n ns.is('controls-right', controlsAtRight),\n ns.is(align, !!align),\n ]\"\n @dragstart.prevent\n >\n <span\n v-if=\"controls\"\n v-repeat-click=\"decrease\"\n role=\"button\"\n :aria-label=\"t('el.inputNumber.decrease')\"\n :class=\"[ns.e('decrease'), ns.is('disabled', minDisabled)]\"\n @keydown.enter=\"decrease\"\n >\n <slot name=\"decrease-icon\">\n <el-icon>\n <arrow-down v-if=\"controlsAtRight\" />\n <minus v-else />\n </el-icon>\n </slot>\n </span>\n <span\n v-if=\"controls\"\n v-repeat-click=\"increase\"\n role=\"button\"\n :aria-label=\"t('el.inputNumber.increase')\"\n :class=\"[ns.e('increase'), ns.is('disabled', maxDisabled)]\"\n @keydown.enter=\"increase\"\n >\n <slot name=\"increase-icon\">\n <el-icon>\n <arrow-up v-if=\"controlsAtRight\" />\n <plus v-else />\n </el-icon>\n </slot>\n </span>\n <el-input\n :id=\"id\"\n ref=\"input\"\n :type=\"formatter ? 'text' : 'number'\"\n :step=\"step\"\n :model-value=\"displayValue\"\n :placeholder=\"placeholder\"\n :readonly=\"readonly\"\n :disabled=\"inputNumberDisabled\"\n :size=\"inputNumberSize\"\n :max=\"max\"\n :min=\"min\"\n :name=\"name\"\n :aria-label=\"ariaLabel\"\n :validate-event=\"false\"\n :inputmode=\"inputmode\"\n :formatter=\"formatter\"\n :parser=\"parser\"\n :tabindex=\"tabindex\"\n @keydown=\"handleKeydown\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n @input=\"handleInput\"\n @change=\"handleInputChange\"\n >\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template v-if=\"$slots.suffix\" #suffix>\n <slot name=\"suffix\" />\n </template>\n </el-input>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUpdated, reactive, ref, watch } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { ElInput } from '@element-plus/components/input'\nimport { ElIcon } from '@element-plus/components/icon'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport { vRepeatClick } from '@element-plus/directives'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport {\n NOOP,\n debugWarn,\n getEventCode,\n getEventKey,\n isNumber,\n isString,\n isUndefined,\n throwError,\n} from '@element-plus/utils'\nimport { ArrowDown, ArrowUp, Minus, Plus } from '@element-plus/icons-vue'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { inputNumberEmits } from './input-number'\n\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { InputNumberProps } from './input-number'\n\ndefineOptions({\n name: 'ElInputNumber',\n})\n\nconst props = withDefaults(defineProps<InputNumberProps>(), {\n id: undefined,\n disabled: undefined,\n step: 1,\n max: Number.MAX_SAFE_INTEGER,\n min: Number.MIN_SAFE_INTEGER,\n stepStrictly: false,\n readonly: false,\n controls: true,\n controlsPosition: '',\n valueOnClear: null,\n validateEvent: true,\n inputmode: undefined,\n align: 'center',\n tabindex: 0,\n})\nconst emit = defineEmits(inputNumberEmits)\n\nconst { t } = useLocale()\nconst ns = useNamespace('input-number')\nconst input = ref<InputInstance>()\n\ninterface Data {\n currentValue: number | null | undefined\n userInput: null | number | string\n}\nconst data = reactive<Data>({\n currentValue: props.modelValue,\n userInput: null,\n})\n\nconst { formItem } = useFormItem()\n\nconst minDisabled = computed(\n () => isNumber(props.modelValue) && props.modelValue <= props.min\n)\nconst maxDisabled = computed(\n () => isNumber(props.modelValue) && props.modelValue >= props.max\n)\n\nconst numPrecision = computed(() => {\n const stepPrecision = getPrecision(props.step)\n if (!isUndefined(props.precision)) {\n if (stepPrecision > props.precision) {\n debugWarn(\n 'InputNumber',\n 'precision should not be less than the decimal places of step'\n )\n }\n return props.precision\n } else {\n return Math.max(getPrecision(props.modelValue), stepPrecision)\n }\n})\nconst controlsAtRight = computed(() => {\n return props.controls && props.controlsPosition === 'right'\n})\n\nconst inputNumberSize = useFormSize()\nconst inputNumberDisabled = useFormDisabled()\n\nconst displayValue = computed(() => {\n if (data.userInput !== null) {\n return data.userInput\n }\n let currentValue: number | string | undefined | null = data.currentValue\n if (isNil(currentValue)) return ''\n if (isNumber(currentValue)) {\n if (Number.isNaN(currentValue)) return ''\n if (!isUndefined(props.precision)) {\n currentValue = currentValue.toFixed(props.precision)\n }\n }\n return currentValue\n})\nconst toPrecision = (num: number, pre?: number) => {\n if (isUndefined(pre)) pre = numPrecision.value\n if (pre === 0) return Math.round(num)\n let snum = String(num)\n const pointPos = snum.indexOf('.')\n if (pointPos === -1) return num\n const nums = snum.replace('.', '').split('')\n const datum = nums[pointPos + pre]\n if (!datum) return num\n const length = snum.length\n if (snum.charAt(length - 1) === '5') {\n snum = `${snum.slice(0, Math.max(0, length - 1))}6`\n }\n return Number.parseFloat(Number(snum).toFixed(pre))\n}\nconst getPrecision = (value: number | null | undefined) => {\n if (isNil(value)) return 0\n const valueString = value.toString()\n const dotPosition = valueString.indexOf('.')\n let precision = 0\n if (dotPosition !== -1) {\n precision = valueString.length - dotPosition - 1\n }\n return precision\n}\nconst ensurePrecision = (val: number, coefficient: 1 | -1 = 1) => {\n if (!isNumber(val)) return data.currentValue\n if (val >= Number.MAX_SAFE_INTEGER && coefficient === 1) {\n debugWarn(\n 'InputNumber',\n 'The value has reached the maximum safe integer limit.'\n )\n return val\n } else if (val <= Number.MIN_SAFE_INTEGER && coefficient === -1) {\n debugWarn(\n 'InputNumber',\n 'The value has reached the minimum safe integer limit.'\n )\n return val\n }\n\n // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n return toPrecision(val + props.step * coefficient)\n}\nconst handleKeydown = (event: KeyboardEvent | Event) => {\n const code = getEventCode(event as KeyboardEvent)\n const key = getEventKey(event as KeyboardEvent)\n\n if (props.disabledScientific && ['e', 'E'].includes(key)) {\n event.preventDefault()\n return\n }\n\n switch (code) {\n case EVENT_CODE.up: {\n event.preventDefault()\n increase()\n break\n }\n case EVENT_CODE.down: {\n event.preventDefault()\n decrease()\n break\n }\n }\n}\nconst increase = () => {\n if (props.readonly || inputNumberDisabled.value || maxDisabled.value) return\n const value = Number(displayValue.value) || 0\n const newVal = ensurePrecision(value)\n setCurrentValue(newVal)\n emit(INPUT_EVENT, data.currentValue)\n setCurrentValueToModelValue()\n}\nconst decrease = () => {\n if (props.readonly || inputNumberDisabled.value || minDisabled.value) return\n const value = Number(displayValue.value) || 0\n const newVal = ensurePrecision(value, -1)\n setCurrentValue(newVal)\n emit(INPUT_EVENT, data.currentValue)\n setCurrentValueToModelValue()\n}\nconst verifyValue = (\n value: number | string | null | undefined,\n update?: boolean\n): number | null | undefined => {\n const { max, min, step, precision, stepStrictly, valueOnClear } = props\n if (max < min) {\n throwError('InputNumber', 'min should not be greater than max.')\n }\n let newVal = !value ? Number(value) : Number.parseFloat(String(value))\n if (isNil(value) || Number.isNaN(newVal)) {\n return null\n }\n if (value === '') {\n if (valueOnClear === null) {\n return null\n }\n newVal = isString(valueOnClear) ? { min, max }[valueOnClear] : valueOnClear\n }\n if (stepStrictly) {\n newVal = toPrecision(\n Math.round(toPrecision(newVal / step)) * step,\n precision\n )\n if (newVal !== value) {\n update && emit(UPDATE_MODEL_EVENT, newVal)\n }\n }\n if (!isUndefined(precision)) {\n newVal = toPrecision(newVal, precision)\n }\n if (newVal > max || newVal < min) {\n newVal = newVal > max ? max : min\n update && emit(UPDATE_MODEL_EVENT, newVal)\n }\n return newVal\n}\nconst setCurrentValue = (\n value: number | string | null | undefined,\n emitChange = true\n) => {\n const oldVal = data.currentValue\n const newVal = verifyValue(value)\n if (!emitChange) {\n emit(UPDATE_MODEL_EVENT, newVal!)\n return\n }\n data.userInput = null\n if (oldVal === newVal && value) return\n emit(UPDATE_MODEL_EVENT, newVal!)\n if (oldVal !== newVal) {\n emit(CHANGE_EVENT, newVal!, oldVal!)\n }\n if (props.validateEvent) {\n formItem?.validate?.('change').catch(NOOP)\n }\n data.currentValue = newVal\n}\nconst handleInput = (value: string) => {\n data.userInput = value\n let newVal = value === '' ? null : Number.parseFloat(value)\n if (Number.isNaN(newVal)) {\n newVal = null\n }\n emit(INPUT_EVENT, newVal)\n setCurrentValue(newVal, false)\n}\nconst handleInputChange = (value: string) => {\n const newVal = value !== '' ? Number.parseFloat(value) : ''\n if (\n (isNumber(newVal) && !Number.isNaN(newVal)) ||\n (props.formatter && Number.isNaN(newVal)) ||\n newVal === ''\n ) {\n setCurrentValue(newVal)\n }\n setCurrentValueToModelValue()\n data.userInput = null\n}\n\nconst focus = () => {\n input.value?.focus?.()\n}\n\nconst blur = () => {\n input.value?.blur?.()\n}\n\nconst handleFocus = (event: MouseEvent | FocusEvent) => {\n emit('focus', event)\n}\n\nconst handleBlur = (event: MouseEvent | FocusEvent) => {\n data.userInput = null\n // When non-numeric content is entered into a numeric input box,\n // the content displayed on the page is not cleared after the value is cleared. #18533\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1398528\n if (data.currentValue === null && input.value?.input) {\n input.value.input.value = props.formatter?.('') ?? ''\n }\n emit('blur', event)\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch(NOOP)\n }\n}\n\nconst setCurrentValueToModelValue = () => {\n if (data.currentValue !== props.modelValue) {\n data.currentValue = props.modelValue\n }\n}\nconst handleWheel = (e: WheelEvent) => {\n if (document.activeElement === e.target) e.preventDefault()\n}\n\nwatch(\n () => props.modelValue,\n (value, oldValue) => {\n const newValue = verifyValue(value, true)\n if (data.userInput === null && newValue !== oldValue) {\n data.currentValue = newValue\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.precision,\n () => {\n data.currentValue = verifyValue(props.modelValue)\n }\n)\nonMounted(() => {\n const { min, max, modelValue } = props\n const innerInput = input.value?.input as HTMLInputElement\n innerInput.setAttribute('role', 'spinbutton')\n if (Number.isFinite(max)) {\n innerInput.setAttribute('aria-valuemax', String(max))\n } else {\n innerInput.removeAttribute('aria-valuemax')\n }\n if (Number.isFinite(min)) {\n innerInput.setAttribute('aria-valuemin', String(min))\n } else {\n innerInput.removeAttribute('aria-valuemin')\n }\n innerInput.setAttribute(\n 'aria-valuenow',\n data.currentValue || data.currentValue === 0\n ? String(data.currentValue)\n : ''\n )\n innerInput.setAttribute('aria-disabled', String(inputNumberDisabled.value))\n if (!isNumber(modelValue) && modelValue != null) {\n let val: number | null = Number(modelValue)\n if (Number.isNaN(val)) {\n val = null\n }\n emit(UPDATE_MODEL_EVENT, val!)\n }\n innerInput.addEventListener('wheel', handleWheel, { passive: false })\n})\nonUpdated(() => {\n const innerInput = input.value?.input\n innerInput?.setAttribute('aria-valuenow', `${data.currentValue ?? ''}`)\n})\ndefineExpose({\n /** @description get focus the input component */\n focus,\n /** @description remove focus the input component */\n blur,\n})\n</script>\n"],"mappings":"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"}