@element-plus/nightly 0.0.20260303 → 0.0.20260306

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 (498) hide show
  1. package/attributes.json +1 -1
  2. package/dist/index.css +1 -1
  3. package/dist/index.full.js +78 -27
  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 +79 -28
  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/alert/src/alert.d.ts +1 -1
  278. package/es/components/anchor/src/anchor.vue.d.ts +2 -2
  279. package/es/components/autocomplete/src/autocomplete.d.ts +1 -1
  280. package/es/components/autocomplete/src/autocomplete.vue.d.ts +3 -3
  281. package/es/components/badge/src/badge.d.ts +1 -1
  282. package/es/components/badge/src/badge.vue.d.ts +1 -1
  283. package/es/components/button/src/button-group.vue.d.ts +1 -1
  284. package/es/components/button/src/button.d.ts +1 -1
  285. package/es/components/button/src/button.vue.d.ts +1 -1
  286. package/es/components/calendar/style/css.mjs +1 -1
  287. package/es/components/calendar/style/index.mjs +1 -1
  288. package/es/components/carousel/src/carousel.vue.d.ts +1 -1
  289. package/es/components/cascader/src/cascader.d.ts +1 -1
  290. package/es/components/cascader/src/cascader.vue.d.ts +4 -4
  291. package/es/components/check-tag/src/check-tag.d.ts +1 -1
  292. package/es/components/col/src/col.vue.d.ts +1 -1
  293. package/es/components/color-picker/src/color-picker.vue.d.ts +2 -2
  294. package/es/components/color-picker-panel/src/color-picker-panel.vue.d.ts +3 -0
  295. package/es/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  296. package/es/components/color-picker-panel/src/color-picker-panel2.mjs.map +1 -1
  297. package/es/components/date-picker/src/date-picker.d.ts +6 -3
  298. package/es/components/date-picker/src/props.d.ts +2 -1
  299. package/es/components/date-picker-panel/src/date-picker-panel.d.ts +5 -5
  300. package/es/components/date-picker-panel/src/props/date-picker-panel.d.ts +1 -1
  301. package/es/components/descriptions/src/description.vue.d.ts +1 -1
  302. package/es/components/dialog/src/dialog.vue.d.ts +2 -2
  303. package/es/components/divider/src/divider.vue.d.ts +1 -1
  304. package/es/components/drawer/src/drawer.vue.d.ts +3 -3
  305. package/es/components/dropdown/src/dropdown.d.ts +1 -1
  306. package/es/components/dropdown/src/dropdown.vue.d.ts +3 -3
  307. package/es/components/dropdown/style/css.mjs +1 -1
  308. package/es/components/dropdown/style/index.mjs +1 -1
  309. package/es/components/form/src/form-item.d.ts +1 -1
  310. package/es/components/form/src/form-item.vue.d.ts +1 -1
  311. package/es/components/image/src/image.vue.d.ts +2 -2
  312. package/es/components/image-viewer/src/image-viewer.vue.d.ts +1 -1
  313. package/es/components/input/src/input.d.ts +1 -1
  314. package/es/components/input/src/input.vue.d.ts +2 -2
  315. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs +15 -2
  316. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  317. package/es/components/input/src/input2.mjs.map +1 -1
  318. package/es/components/input-tag/src/input-tag.d.ts +1 -1
  319. package/es/components/input-tag/src/input-tag.vue.d.ts +4 -4
  320. package/es/components/link/src/link.d.ts +1 -1
  321. package/es/components/link/src/link.vue.d.ts +1 -1
  322. package/es/components/mention/src/mention.d.ts +1 -1
  323. package/es/components/mention/src/mention.vue.d.ts +1 -1
  324. package/es/components/message/src/message.d.ts +2 -2
  325. package/es/components/message/src/message.vue.d.ts +4 -4
  326. package/es/components/notification/src/notification.d.ts +2 -2
  327. package/es/components/notification/src/notification.vue.d.ts +2 -2
  328. package/es/components/page-header/src/page-header.vue.d.ts +1 -1
  329. package/es/components/pagination/src/pagination.d.ts +1 -1
  330. package/es/components/popconfirm/src/popconfirm.d.ts +2 -2
  331. package/es/components/popconfirm/src/popconfirm.vue.d.ts +1 -1
  332. package/es/components/popover/src/popover.vue.d.ts +3 -1
  333. package/es/components/popover/src/popover.vue_vue_type_script_setup_true_lang.mjs +1 -1
  334. package/es/components/popover/src/popover.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  335. package/es/components/popover/src/popover2.mjs.map +1 -1
  336. package/es/components/progress/src/progress.vue.d.ts +1 -1
  337. package/es/components/result/src/result.d.ts +1 -1
  338. package/es/components/segmented/index.d.ts +42 -42
  339. package/es/components/segmented/src/segmented.vue.d.ts +1 -1
  340. package/es/components/select/src/select.d.ts +1 -1
  341. package/es/components/select/src/select.vue.d.ts +7 -7
  342. package/es/components/select-v2/src/defaults.d.ts +1 -1
  343. package/es/components/select-v2/src/select.vue.d.ts +6 -6
  344. package/es/components/slider/src/button.vue.d.ts +1 -1
  345. package/es/components/slider/src/slider.vue.d.ts +1 -1
  346. package/es/components/space/src/space.d.ts +1 -1
  347. package/es/components/steps/src/item.d.ts +1 -1
  348. package/es/components/steps/src/item.vue.d.ts +1 -1
  349. package/es/components/steps/src/steps.d.ts +2 -2
  350. package/es/components/tag/src/tag.d.ts +1 -1
  351. package/es/components/text/src/text.d.ts +1 -1
  352. package/es/components/time-picker/src/common/picker.mjs.map +1 -1
  353. package/es/components/time-picker/src/common/picker.vue.d.ts +8 -5
  354. package/es/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.mjs +5 -1
  355. package/es/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  356. package/es/components/time-picker/src/common/props.d.ts +3 -1
  357. package/es/components/time-picker/src/common/props.mjs +4 -0
  358. package/es/components/time-picker/src/common/props.mjs.map +1 -1
  359. package/es/components/time-picker/src/composables/use-common-picker.d.ts +1 -0
  360. package/es/components/time-picker/src/composables/use-time-picker.mjs +8 -2
  361. package/es/components/time-picker/src/composables/use-time-picker.mjs.map +1 -1
  362. package/es/components/time-picker/src/time-picker-com/basic-time-spinner.mjs.map +1 -1
  363. package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.mjs +17 -2
  364. package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  365. package/es/components/time-picker/src/time-picker-com/panel-time-pick.mjs.map +1 -1
  366. package/es/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.mjs +7 -2
  367. package/es/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  368. package/es/components/time-picker/src/time-picker-com/panel-time-range.mjs.map +1 -1
  369. package/es/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.mjs +7 -2
  370. package/es/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  371. package/es/components/time-picker/src/time-picker.d.ts +6 -3
  372. package/es/components/time-select/src/time-select.vue.d.ts +2 -2
  373. package/es/components/timeline/src/timeline-item.d.ts +1 -1
  374. package/es/components/timeline/src/timeline-item.vue.d.ts +1 -1
  375. package/es/components/tooltip/src/tooltip.vue.d.ts +2 -2
  376. package/es/components/tour/src/tour.vue.d.ts +1 -1
  377. package/es/components/tree-select/src/tree-select.vue.d.ts +4 -4
  378. package/es/components/virtual-list/src/builders/build-grid.d.ts +1 -1
  379. package/es/components/virtual-list/src/components/dynamic-size-grid.d.ts +1 -1
  380. package/es/components/virtual-list/src/components/dynamic-size-list.d.ts +1 -1
  381. package/es/components/virtual-list/src/components/fixed-size-grid.d.ts +1 -1
  382. package/es/components/virtual-list/src/components/fixed-size-list.d.ts +1 -1
  383. package/es/version.mjs +1 -1
  384. package/es/version.mjs.map +1 -1
  385. package/lib/components/alert/src/alert.d.ts +1 -1
  386. package/lib/components/anchor/src/anchor.vue.d.ts +2 -2
  387. package/lib/components/autocomplete/src/autocomplete.d.ts +1 -1
  388. package/lib/components/autocomplete/src/autocomplete.vue.d.ts +3 -3
  389. package/lib/components/badge/src/badge.d.ts +1 -1
  390. package/lib/components/badge/src/badge.vue.d.ts +1 -1
  391. package/lib/components/button/src/button-group.vue.d.ts +1 -1
  392. package/lib/components/button/src/button.d.ts +1 -1
  393. package/lib/components/button/src/button.vue.d.ts +1 -1
  394. package/lib/components/calendar/style/css.js +1 -1
  395. package/lib/components/calendar/style/index.js +1 -1
  396. package/lib/components/carousel/src/carousel.vue.d.ts +1 -1
  397. package/lib/components/cascader/src/cascader.d.ts +1 -1
  398. package/lib/components/cascader/src/cascader.vue.d.ts +4 -4
  399. package/lib/components/check-tag/src/check-tag.d.ts +1 -1
  400. package/lib/components/col/src/col.vue.d.ts +1 -1
  401. package/lib/components/color-picker/src/color-picker.vue.d.ts +2 -2
  402. package/lib/components/color-picker-panel/src/color-picker-panel.vue.d.ts +3 -0
  403. package/lib/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  404. package/lib/components/color-picker-panel/src/color-picker-panel2.js.map +1 -1
  405. package/lib/components/date-picker/src/date-picker.d.ts +6 -3
  406. package/lib/components/date-picker/src/props.d.ts +2 -1
  407. package/lib/components/date-picker-panel/src/date-picker-panel.d.ts +5 -5
  408. package/lib/components/date-picker-panel/src/props/date-picker-panel.d.ts +1 -1
  409. package/lib/components/descriptions/src/description.vue.d.ts +1 -1
  410. package/lib/components/dialog/src/dialog.vue.d.ts +2 -2
  411. package/lib/components/divider/src/divider.vue.d.ts +1 -1
  412. package/lib/components/drawer/src/drawer.vue.d.ts +3 -3
  413. package/lib/components/dropdown/src/dropdown.d.ts +1 -1
  414. package/lib/components/dropdown/src/dropdown.vue.d.ts +3 -3
  415. package/lib/components/dropdown/style/css.js +1 -1
  416. package/lib/components/dropdown/style/index.js +1 -1
  417. package/lib/components/form/src/form-item.d.ts +1 -1
  418. package/lib/components/form/src/form-item.vue.d.ts +1 -1
  419. package/lib/components/image/src/image.vue.d.ts +2 -2
  420. package/lib/components/image-viewer/src/image-viewer.vue.d.ts +1 -1
  421. package/lib/components/input/src/input.d.ts +1 -1
  422. package/lib/components/input/src/input.vue.d.ts +2 -2
  423. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js +15 -2
  424. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  425. package/lib/components/input/src/input2.js.map +1 -1
  426. package/lib/components/input-tag/src/input-tag.d.ts +1 -1
  427. package/lib/components/input-tag/src/input-tag.vue.d.ts +4 -4
  428. package/lib/components/link/src/link.d.ts +1 -1
  429. package/lib/components/link/src/link.vue.d.ts +1 -1
  430. package/lib/components/mention/src/mention.d.ts +1 -1
  431. package/lib/components/mention/src/mention.vue.d.ts +1 -1
  432. package/lib/components/message/src/message.d.ts +2 -2
  433. package/lib/components/message/src/message.vue.d.ts +4 -4
  434. package/lib/components/notification/src/notification.d.ts +2 -2
  435. package/lib/components/notification/src/notification.vue.d.ts +2 -2
  436. package/lib/components/page-header/src/page-header.vue.d.ts +1 -1
  437. package/lib/components/pagination/src/pagination.d.ts +1 -1
  438. package/lib/components/popconfirm/src/popconfirm.d.ts +2 -2
  439. package/lib/components/popconfirm/src/popconfirm.vue.d.ts +1 -1
  440. package/lib/components/popover/src/popover.vue.d.ts +3 -1
  441. package/lib/components/popover/src/popover.vue_vue_type_script_setup_true_lang.js +1 -1
  442. package/lib/components/popover/src/popover.vue_vue_type_script_setup_true_lang.js.map +1 -1
  443. package/lib/components/popover/src/popover2.js.map +1 -1
  444. package/lib/components/progress/src/progress.vue.d.ts +1 -1
  445. package/lib/components/result/src/result.d.ts +1 -1
  446. package/lib/components/segmented/index.d.ts +42 -42
  447. package/lib/components/segmented/src/segmented.vue.d.ts +1 -1
  448. package/lib/components/select/src/select.d.ts +1 -1
  449. package/lib/components/select/src/select.vue.d.ts +7 -7
  450. package/lib/components/select-v2/src/defaults.d.ts +1 -1
  451. package/lib/components/select-v2/src/select.vue.d.ts +6 -6
  452. package/lib/components/slider/src/button.vue.d.ts +1 -1
  453. package/lib/components/slider/src/slider.vue.d.ts +1 -1
  454. package/lib/components/space/src/space.d.ts +1 -1
  455. package/lib/components/steps/src/item.d.ts +1 -1
  456. package/lib/components/steps/src/item.vue.d.ts +1 -1
  457. package/lib/components/steps/src/steps.d.ts +2 -2
  458. package/lib/components/tag/src/tag.d.ts +1 -1
  459. package/lib/components/text/src/text.d.ts +1 -1
  460. package/lib/components/time-picker/src/common/picker.js.map +1 -1
  461. package/lib/components/time-picker/src/common/picker.vue.d.ts +8 -5
  462. package/lib/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.js +5 -1
  463. package/lib/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  464. package/lib/components/time-picker/src/common/props.d.ts +3 -1
  465. package/lib/components/time-picker/src/common/props.js +4 -0
  466. package/lib/components/time-picker/src/common/props.js.map +1 -1
  467. package/lib/components/time-picker/src/composables/use-common-picker.d.ts +1 -0
  468. package/lib/components/time-picker/src/composables/use-time-picker.js +7 -1
  469. package/lib/components/time-picker/src/composables/use-time-picker.js.map +1 -1
  470. package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.js.map +1 -1
  471. package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.js +17 -2
  472. package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  473. package/lib/components/time-picker/src/time-picker-com/panel-time-pick.js.map +1 -1
  474. package/lib/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.js +7 -2
  475. package/lib/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.js.map +1 -1
  476. package/lib/components/time-picker/src/time-picker-com/panel-time-range.js.map +1 -1
  477. package/lib/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.js +7 -2
  478. package/lib/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.js.map +1 -1
  479. package/lib/components/time-picker/src/time-picker.d.ts +6 -3
  480. package/lib/components/time-select/src/time-select.vue.d.ts +2 -2
  481. package/lib/components/timeline/src/timeline-item.d.ts +1 -1
  482. package/lib/components/timeline/src/timeline-item.vue.d.ts +1 -1
  483. package/lib/components/tooltip/src/tooltip.vue.d.ts +2 -2
  484. package/lib/components/tour/src/tour.vue.d.ts +1 -1
  485. package/lib/components/tree-select/src/tree-select.vue.d.ts +4 -4
  486. package/lib/components/virtual-list/src/builders/build-grid.d.ts +1 -1
  487. package/lib/components/virtual-list/src/components/dynamic-size-grid.d.ts +1 -1
  488. package/lib/components/virtual-list/src/components/dynamic-size-list.d.ts +1 -1
  489. package/lib/components/virtual-list/src/components/fixed-size-grid.d.ts +1 -1
  490. package/lib/components/virtual-list/src/components/fixed-size-list.d.ts +1 -1
  491. package/lib/version.js +1 -1
  492. package/lib/version.js.map +1 -1
  493. package/package.json +2 -2
  494. package/tags.json +1 -1
  495. package/theme-chalk/el-input.css +1 -1
  496. package/theme-chalk/index.css +1 -1
  497. package/theme-chalk/src/input.scss +23 -0
  498. package/web-types.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"picker.js","names":[],"sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"refPopper\"\n :visible=\"pickerVisible\"\n effect=\"light\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n role=\"dialog\"\n teleported\n :transition=\"`${nsDate.namespace.value}-zoom-in-top`\"\n :popper-class=\"[`${nsDate.namespace.value}-picker__popper`, popperClass!]\"\n :popper-style=\"popperStyle\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :gpu-acceleration=\"false\"\n :placement=\"placement\"\n :stop-popper-mouse-event=\"false\"\n :hide-after=\"0\"\n persistent\n @before-show=\"onBeforeShow\"\n @show=\"onShow\"\n @hide=\"onHide\"\n >\n <template #default>\n <el-input\n v-if=\"!isRangeInput\"\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string\n \"\n ref=\"inputRef\"\n container-role=\"combobox\"\n :model-value=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n displayValue as string\n \"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string\n \"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n :class=\"[\n nsDate.b('editor'),\n nsDate.bm('editor', type),\n nsDate.is('focus', pickerVisible),\n $attrs.class,\n ]\"\n :style=\"$attrs.style\"\n :readonly=\"\n !editable ||\n readonly ||\n isDatesPicker ||\n isMonthsPicker ||\n isYearsPicker ||\n type === 'week'\n \"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n :validate-event=\"false\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeydownInput\"\n @change=\"handleChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @click.stop\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"nsInput.e('icon')\"\n @mousedown.prevent=\"onMouseDownInput\"\n @touchstart.passive=\"onTouchStartInput\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClearBtn && clearIcon\"\n :class=\"`${nsInput.e('icon')} clear-icon`\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <picker-range-trigger\n v-else\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string[]\n \"\n ref=\"inputRef\"\n :model-value=\"displayValue\"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string[]\n \"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n :start-placeholder=\"startPlaceholder\"\n :end-placeholder=\"endPlaceholder\"\n :class=\"rangeInputKls\"\n :style=\"$attrs.style\"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n autocomplete=\"off\"\n role=\"combobox\"\n @click=\"onMouseDownInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @start-input=\"handleStartInput\"\n @start-change=\"handleStartChange\"\n @end-input=\"handleEndInput\"\n @end-change=\"handleEndChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @keydown=\"handleKeydownInput\"\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"[nsInput.e('icon'), nsRange.e('icon')]\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #range-separator>\n <slot name=\"range-separator\">\n <span :class=\"nsRange.b('separator')\">{{ rangeSeparator }}</span>\n </slot>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearIcon\"\n :class=\"clearIconKls\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </picker-range-trigger>\n </template>\n <template #content>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :date-format=\"dateFormat\"\n :time-format=\"timeFormat\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n :show-now=\"showNow\"\n :show-confirm=\"showConfirm\"\n :show-footer=\"showFooter\"\n :show-week-number=\"showWeekNumber\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @clear=\"onClear\"\n @panel-change=\"onPanelChange\"\n @mousedown.stop\n />\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n inject,\n nextTick,\n onBeforeUnmount,\n provide,\n ref,\n unref,\n useAttrs,\n watch,\n} from 'vue'\nimport { onClickOutside, unrefElement } from '@vueuse/core'\nimport {\n useEmptyValues,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport { NOOP, debugWarn, getEventCode, isArray } from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { Calendar, Clock } from '@element-plus/icons-vue'\nimport { dayOrDaysToDate, valueEquals } from '../utils'\nimport {\n PICKER_BASE_INJECTION_KEY,\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n ROOT_COMMON_PICKER_INJECTION_KEY,\n} from '../constants'\nimport { useCommonPicker } from '../composables/use-common-picker'\nimport { timePickerDefaultProps } from './props'\nimport PickerRangeTrigger from './picker-range-trigger.vue'\n\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { Dayjs } from 'dayjs'\nimport type { ComponentPublicInstance, Ref } from 'vue'\nimport type { Options } from '@popperjs/core'\nimport type { DayOrDays, TimePickerDefaultProps, UserInput } from './props'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\n\ndefineOptions({\n name: 'Picker',\n})\n\nconst props = defineProps(timePickerDefaultProps)\nconst emit = defineEmits([\n UPDATE_MODEL_EVENT,\n CHANGE_EVENT,\n 'focus',\n 'blur',\n 'clear',\n 'calendar-change',\n 'panel-change',\n 'visible-change',\n 'keydown',\n])\nconst attrs = useAttrs()\n\nconst nsDate = useNamespace('date')\nconst nsInput = useNamespace('input')\nconst nsRange = useNamespace('range')\n\nconst { formItem } = useFormItem()\nconst elPopperOptions = inject(\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n {} as Options\n)\nconst emptyValues = useEmptyValues(props, null)\n\nconst refPopper = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst valueOnOpen = ref<TimePickerDefaultProps['modelValue'] | null>(null)\nlet hasJustTabExitedInput = false\n\nconst pickerDisabled = useFormDisabled()\n\nconst commonPicker = useCommonPicker(props, emit)\nconst {\n parsedValue,\n pickerActualVisible,\n userInput,\n pickerVisible,\n pickerOptions,\n valueIsEmpty,\n emitInput,\n onPick,\n onSetPickerOption,\n onCalendarChange,\n onPanelChange,\n} = commonPicker\n\nconst { isFocused, handleFocus, handleBlur } = useFocusController(inputRef, {\n disabled: pickerDisabled,\n beforeFocus() {\n return props.readonly\n },\n afterFocus() {\n if (!props.automaticDropdown) return\n pickerVisible.value = true\n },\n beforeBlur(event) {\n return (\n !hasJustTabExitedInput && refPopper.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n handleChange()\n pickerVisible.value = false\n hasJustTabExitedInput = false\n props.validateEvent &&\n formItem?.validate('blur').catch((err) => debugWarn(err))\n },\n})\n\nconst hovering = ref(false)\n\nconst rangeInputKls = computed(() => [\n nsDate.b('editor'),\n nsDate.bm('editor', props.type),\n nsInput.e('wrapper'),\n nsDate.is('disabled', pickerDisabled.value),\n nsDate.is('active', pickerVisible.value),\n nsRange.b('editor'),\n pickerSize ? nsRange.bm('editor', pickerSize.value) : '',\n attrs.class,\n])\n\nconst clearIconKls = computed(() => [\n nsInput.e('icon'),\n nsRange.e('close-icon'),\n !showClearBtn.value ? nsRange.em('close-icon', 'hidden') : '',\n])\n\nwatch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n } else {\n nextTick(() => {\n if (val) {\n valueOnOpen.value = props.modelValue\n }\n })\n }\n})\nconst emitChange = (\n val: TimePickerDefaultProps['modelValue'] | null,\n isClear?: boolean\n) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n emit(CHANGE_EVENT, val)\n // Set the value of valueOnOpen when clearing to avoid triggering change events multiple times.\n isClear && (valueOnOpen.value = val)\n props.validateEvent &&\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n}\nconst emitKeydown = (e: KeyboardEvent) => {\n emit('keydown', e)\n}\n\nconst refInput = computed<HTMLInputElement[]>(() => {\n if (inputRef.value) {\n return Array.from<HTMLInputElement>(\n inputRef.value.$el.querySelectorAll('input')\n )\n }\n return []\n})\n\n// @ts-ignore\nconst setSelectionRange = (start: number, end: number, pos?: 'min' | 'max') => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n}\n\nconst onBeforeShow = () => {\n pickerActualVisible.value = true\n}\n\nconst onShow = () => {\n emit('visible-change', true)\n}\n\nconst onHide = () => {\n pickerActualVisible.value = false\n pickerVisible.value = false\n emit('visible-change', false)\n}\n\nconst handleOpen = () => {\n pickerVisible.value = true\n}\n\nconst handleClose = () => {\n pickerVisible.value = false\n}\n\nconst displayValue = computed<UserInput>(() => {\n const formattedValue = formatToString(parsedValue.value)\n if (isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (!isTimePicker.value && valueIsEmpty.value) return ''\n if (!pickerVisible.value && valueIsEmpty.value) return ''\n if (formattedValue) {\n return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n})\n\nconst isTimeLikePicker = computed(() => props.type.includes('time'))\n\nconst isTimePicker = computed(() => props.type.startsWith('time'))\n\nconst isDatesPicker = computed(() => props.type === 'dates')\n\nconst isMonthsPicker = computed(() => props.type === 'months')\n\nconst isYearsPicker = computed(() => props.type === 'years')\n\nconst triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n)\n\nconst showClearBtn = computed(\n () =>\n props.clearable &&\n !pickerDisabled.value &&\n !props.readonly &&\n !valueIsEmpty.value &&\n (hovering.value || isFocused.value)\n)\n\nconst onClear = (event?: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClearBtn.value) {\n event?.stopPropagation()\n // When the handleClear Function was provided, emit null will be executed inside it\n // There is no need for us to execute emit null twice. #14752\n if (pickerOptions.value.handleClear) {\n pickerOptions.value.handleClear()\n } else {\n emitInput(emptyValues.valueOnClear.value)\n }\n emitChange(emptyValues.valueOnClear.value, true)\n onHide()\n }\n emit('clear')\n}\n\nconst onMouseDownInput = async (event: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\nconst onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n hovering.value = true\n }\n}\nconst onMouseLeave = () => {\n hovering.value = false\n}\n\nconst onTouchStartInput = (event: TouchEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.touches[0].target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\n\nconst isRangeInput = computed(() => {\n return props.type.includes('range')\n})\n\nconst pickerSize = useFormSize()\n\nconst popperEl = computed(() => unref(refPopper)?.popperRef?.contentRef)\n\nconst stophandle = onClickOutside(\n inputRef as Ref<ComponentPublicInstance>,\n (e: PointerEvent) => {\n const unrefedPopperEl = unref(popperEl)\n const inputEl = unrefElement(inputRef as Ref<ComponentPublicInstance>)\n if (\n (unrefedPopperEl &&\n (e.target === unrefedPopperEl ||\n e.composedPath().includes(unrefedPopperEl))) ||\n e.target === inputEl ||\n (inputEl && e.composedPath().includes(inputEl))\n )\n return\n pickerVisible.value = false\n }\n)\n\nonBeforeUnmount(() => {\n stophandle?.()\n})\n\nconst handleChange = () => {\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(dayOrDaysToDate(value))\n }\n userInput.value = null\n }\n }\n if (userInput.value === '') {\n emitInput(emptyValues.valueOnClear.value)\n emitChange(emptyValues.valueOnClear.value, true)\n userInput.value = null\n }\n}\n\nconst parseUserInputToDayjs = (value: UserInput) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput!(value)\n}\n\nconst formatToString = (value: DayOrDays) => {\n if (!value) return null\n const res = isArray(value)\n ? value.map((_) => _.format(props.format))\n : value.format(props.format)\n return res as UserInput\n}\n\nconst isValidValue = (value: DayOrDays) => {\n return pickerOptions.value.isValidValue!(value)\n}\n\nconst handleKeydownInput = async (event: Event | KeyboardEvent) => {\n if (props.readonly || pickerDisabled.value) return\n\n const code = getEventCode(event as KeyboardEvent)\n emitKeydown(event as KeyboardEvent)\n if (code === EVENT_CODE.esc) {\n if (pickerVisible.value === true) {\n pickerVisible.value = false\n event.preventDefault()\n event.stopPropagation()\n }\n return\n }\n\n if (code === EVENT_CODE.down) {\n if (pickerOptions.value.handleFocusPicker) {\n event.preventDefault()\n event.stopPropagation()\n }\n if (pickerVisible.value === false) {\n pickerVisible.value = true\n await nextTick()\n }\n if (pickerOptions.value.handleFocusPicker) {\n pickerOptions.value.handleFocusPicker()\n return\n }\n }\n\n if (code === EVENT_CODE.tab) {\n hasJustTabExitedInput = true\n return\n }\n\n if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {\n if (!pickerVisible.value) {\n pickerVisible.value = true\n } else if (\n userInput.value === null ||\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value) as DayOrDays)\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.preventDefault()\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n if (pickerOptions.value.handleKeydownInput) {\n pickerOptions.value.handleKeydownInput(event as KeyboardEvent)\n }\n}\nconst onUserInput = (e: string) => {\n userInput.value = e\n // Temporary fix when the picker is dismissed and the input box\n // is focused, just mimic the behavior of antdesign.\n if (!pickerVisible.value) {\n pickerVisible.value = true\n }\n}\n\nconst handleStartInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [target.value, userInput.value[1]]\n } else {\n userInput.value = [target.value, null]\n }\n}\n\nconst handleEndInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [userInput.value[0], target.value]\n } else {\n userInput.value = [null, target.value]\n }\n}\n\nconst handleStartChange = () => {\n const values = userInput.value as string[]\n const value = parseUserInputToDayjs(values && values[0]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n formatToString(value) as string,\n displayValue.value?.[1] || null,\n ]\n const newValue = [value, parsedVal && (parsedVal[1] || null)] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst handleEndChange = () => {\n const values = unref(userInput) as string[]\n const value = parseUserInputToDayjs(values && values[1]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n unref(displayValue)?.[0] || null,\n formatToString(value) as string,\n ]\n const newValue = [parsedVal && parsedVal[0], value] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nprovide(PICKER_BASE_INJECTION_KEY, {\n props,\n emptyValues,\n})\nprovide(ROOT_COMMON_PICKER_INJECTION_KEY, commonPicker)\n\ndefineExpose({\n /**\n * @description focus input box.\n */\n focus,\n /**\n * @description blur input box.\n */\n blur,\n /**\n * @description opens picker\n */\n handleOpen,\n /**\n * @description closes picker\n */\n handleClose,\n /**\n * @description pick item manually\n */\n onPick,\n})\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"picker.js","names":[],"sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"refPopper\"\n :visible=\"pickerVisible\"\n effect=\"light\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n role=\"dialog\"\n teleported\n :transition=\"`${nsDate.namespace.value}-zoom-in-top`\"\n :popper-class=\"[`${nsDate.namespace.value}-picker__popper`, popperClass!]\"\n :popper-style=\"popperStyle\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :gpu-acceleration=\"false\"\n :placement=\"placement\"\n :stop-popper-mouse-event=\"false\"\n :hide-after=\"0\"\n persistent\n @before-show=\"onBeforeShow\"\n @show=\"onShow\"\n @hide=\"onHide\"\n >\n <template #default>\n <el-input\n v-if=\"!isRangeInput\"\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string\n \"\n ref=\"inputRef\"\n container-role=\"combobox\"\n :model-value=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n displayValue as string\n \"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string\n \"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n :class=\"[\n nsDate.b('editor'),\n nsDate.bm('editor', type),\n nsDate.is('focus', pickerVisible),\n $attrs.class,\n ]\"\n :style=\"$attrs.style\"\n :readonly=\"\n !editable ||\n readonly ||\n isDatesPicker ||\n isMonthsPicker ||\n isYearsPicker ||\n type === 'week'\n \"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n :validate-event=\"false\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeydownInput\"\n @change=\"handleChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @click.stop\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"nsInput.e('icon')\"\n @mousedown.prevent=\"onMouseDownInput\"\n @touchstart.passive=\"onTouchStartInput\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClearBtn && clearIcon\"\n :class=\"`${nsInput.e('icon')} clear-icon`\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <picker-range-trigger\n v-else\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string[]\n \"\n ref=\"inputRef\"\n :model-value=\"displayValue\"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string[]\n \"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n :start-placeholder=\"startPlaceholder\"\n :end-placeholder=\"endPlaceholder\"\n :class=\"rangeInputKls\"\n :style=\"$attrs.style\"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n autocomplete=\"off\"\n role=\"combobox\"\n @click=\"onMouseDownInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @start-input=\"handleStartInput\"\n @start-change=\"handleStartChange\"\n @end-input=\"handleEndInput\"\n @end-change=\"handleEndChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @keydown=\"handleKeydownInput\"\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"[nsInput.e('icon'), nsRange.e('icon')]\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #range-separator>\n <slot name=\"range-separator\">\n <span :class=\"nsRange.b('separator')\">{{ rangeSeparator }}</span>\n </slot>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearIcon\"\n :class=\"clearIconKls\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </picker-range-trigger>\n </template>\n <template #content>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :date-format=\"dateFormat\"\n :time-format=\"timeFormat\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n :show-now=\"showNow\"\n :show-confirm=\"showConfirm\"\n :show-footer=\"showFooter\"\n :show-week-number=\"showWeekNumber\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @clear=\"onClear\"\n @panel-change=\"onPanelChange\"\n @mousedown.stop\n />\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n inject,\n nextTick,\n onBeforeUnmount,\n provide,\n ref,\n unref,\n useAttrs,\n watch,\n} from 'vue'\nimport { onClickOutside, unrefElement } from '@vueuse/core'\nimport {\n useEmptyValues,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport { NOOP, debugWarn, getEventCode, isArray } from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { Calendar, Clock } from '@element-plus/icons-vue'\nimport { dayOrDaysToDate, valueEquals } from '../utils'\nimport {\n PICKER_BASE_INJECTION_KEY,\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n ROOT_COMMON_PICKER_INJECTION_KEY,\n} from '../constants'\nimport { useCommonPicker } from '../composables/use-common-picker'\nimport { timePickerDefaultProps } from './props'\nimport PickerRangeTrigger from './picker-range-trigger.vue'\n\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { Dayjs } from 'dayjs'\nimport type { ComponentPublicInstance, Ref } from 'vue'\nimport type { Options } from '@popperjs/core'\nimport type { DayOrDays, TimePickerDefaultProps, UserInput } from './props'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\n\ndefineOptions({\n name: 'Picker',\n})\n\nconst props = defineProps(timePickerDefaultProps)\nconst emit = defineEmits([\n UPDATE_MODEL_EVENT,\n CHANGE_EVENT,\n 'focus',\n 'blur',\n 'clear',\n 'calendar-change',\n 'panel-change',\n 'visible-change',\n 'keydown',\n])\nconst attrs = useAttrs()\n\nconst nsDate = useNamespace('date')\nconst nsInput = useNamespace('input')\nconst nsRange = useNamespace('range')\n\nconst { formItem } = useFormItem()\nconst elPopperOptions = inject(\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n {} as Options\n)\nconst emptyValues = useEmptyValues(props, null)\n\nconst refPopper = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst valueOnOpen = ref<TimePickerDefaultProps['modelValue'] | null>(null)\nlet hasJustTabExitedInput = false\n\nconst pickerDisabled = useFormDisabled()\n\nconst commonPicker = useCommonPicker(props, emit)\nconst {\n parsedValue,\n pickerActualVisible,\n userInput,\n pickerVisible,\n pickerOptions,\n valueIsEmpty,\n emitInput,\n onPick,\n onSetPickerOption,\n onCalendarChange,\n onPanelChange,\n} = commonPicker\n\nconst { isFocused, handleFocus, handleBlur } = useFocusController(inputRef, {\n disabled: pickerDisabled,\n beforeFocus() {\n return props.readonly\n },\n afterFocus() {\n if (!props.automaticDropdown) return\n pickerVisible.value = true\n },\n beforeBlur(event) {\n return (\n !hasJustTabExitedInput && refPopper.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n if (isTimePicker.value && !props.saveOnBlur) {\n if (!valueIsEmpty.value) {\n pickerOptions.value.handleCancel?.()\n }\n } else {\n handleChange()\n }\n pickerVisible.value = false\n hasJustTabExitedInput = false\n props.validateEvent &&\n formItem?.validate('blur').catch((err) => debugWarn(err))\n },\n})\n\nconst hovering = ref(false)\n\nconst rangeInputKls = computed(() => [\n nsDate.b('editor'),\n nsDate.bm('editor', props.type),\n nsInput.e('wrapper'),\n nsDate.is('disabled', pickerDisabled.value),\n nsDate.is('active', pickerVisible.value),\n nsRange.b('editor'),\n pickerSize ? nsRange.bm('editor', pickerSize.value) : '',\n attrs.class,\n])\n\nconst clearIconKls = computed(() => [\n nsInput.e('icon'),\n nsRange.e('close-icon'),\n !showClearBtn.value ? nsRange.em('close-icon', 'hidden') : '',\n])\n\nwatch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n } else {\n nextTick(() => {\n if (val) {\n valueOnOpen.value = props.modelValue\n }\n })\n }\n})\nconst emitChange = (\n val: TimePickerDefaultProps['modelValue'] | null,\n isClear?: boolean\n) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n emit(CHANGE_EVENT, val)\n // Set the value of valueOnOpen when clearing to avoid triggering change events multiple times.\n isClear && (valueOnOpen.value = val)\n props.validateEvent &&\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n}\nconst emitKeydown = (e: KeyboardEvent) => {\n emit('keydown', e)\n}\n\nconst refInput = computed<HTMLInputElement[]>(() => {\n if (inputRef.value) {\n return Array.from<HTMLInputElement>(\n inputRef.value.$el.querySelectorAll('input')\n )\n }\n return []\n})\n\n// @ts-ignore\nconst setSelectionRange = (start: number, end: number, pos?: 'min' | 'max') => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n}\n\nconst onBeforeShow = () => {\n pickerActualVisible.value = true\n}\n\nconst onShow = () => {\n emit('visible-change', true)\n}\n\nconst onHide = () => {\n pickerActualVisible.value = false\n pickerVisible.value = false\n emit('visible-change', false)\n}\n\nconst handleOpen = () => {\n pickerVisible.value = true\n}\n\nconst handleClose = () => {\n pickerVisible.value = false\n}\n\nconst displayValue = computed<UserInput>(() => {\n const formattedValue = formatToString(parsedValue.value)\n if (isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (isTimePicker.value && valueIsEmpty.value && !props.saveOnBlur) return ''\n if (!isTimePicker.value && valueIsEmpty.value) return ''\n if (!pickerVisible.value && valueIsEmpty.value) return ''\n if (formattedValue) {\n return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n})\n\nconst isTimeLikePicker = computed(() => props.type.includes('time'))\n\nconst isTimePicker = computed(() => props.type.startsWith('time'))\n\nconst isDatesPicker = computed(() => props.type === 'dates')\n\nconst isMonthsPicker = computed(() => props.type === 'months')\n\nconst isYearsPicker = computed(() => props.type === 'years')\n\nconst triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n)\n\nconst showClearBtn = computed(\n () =>\n props.clearable &&\n !pickerDisabled.value &&\n !props.readonly &&\n !valueIsEmpty.value &&\n (hovering.value || isFocused.value)\n)\n\nconst onClear = (event?: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClearBtn.value) {\n event?.stopPropagation()\n // When the handleClear Function was provided, emit null will be executed inside it\n // There is no need for us to execute emit null twice. #14752\n if (pickerOptions.value.handleClear) {\n pickerOptions.value.handleClear()\n } else {\n emitInput(emptyValues.valueOnClear.value)\n }\n emitChange(emptyValues.valueOnClear.value, true)\n onHide()\n }\n emit('clear')\n}\n\nconst onMouseDownInput = async (event: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\nconst onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n hovering.value = true\n }\n}\nconst onMouseLeave = () => {\n hovering.value = false\n}\n\nconst onTouchStartInput = (event: TouchEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.touches[0].target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\n\nconst isRangeInput = computed(() => {\n return props.type.includes('range')\n})\n\nconst pickerSize = useFormSize()\n\nconst popperEl = computed(() => unref(refPopper)?.popperRef?.contentRef)\n\nconst stophandle = onClickOutside(\n inputRef as Ref<ComponentPublicInstance>,\n (e: PointerEvent) => {\n const unrefedPopperEl = unref(popperEl)\n const inputEl = unrefElement(inputRef as Ref<ComponentPublicInstance>)\n if (\n (unrefedPopperEl &&\n (e.target === unrefedPopperEl ||\n e.composedPath().includes(unrefedPopperEl))) ||\n e.target === inputEl ||\n (inputEl && e.composedPath().includes(inputEl))\n )\n return\n pickerVisible.value = false\n }\n)\n\nonBeforeUnmount(() => {\n stophandle?.()\n})\n\nconst handleChange = () => {\n if (isTimePicker.value && !props.saveOnBlur) return\n\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(dayOrDaysToDate(value))\n }\n userInput.value = null\n }\n }\n if (userInput.value === '') {\n emitInput(emptyValues.valueOnClear.value)\n emitChange(emptyValues.valueOnClear.value, true)\n userInput.value = null\n }\n}\n\nconst parseUserInputToDayjs = (value: UserInput) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput!(value)\n}\n\nconst formatToString = (value: DayOrDays) => {\n if (!value) return null\n const res = isArray(value)\n ? value.map((_) => _.format(props.format))\n : value.format(props.format)\n return res as UserInput\n}\n\nconst isValidValue = (value: DayOrDays) => {\n return pickerOptions.value.isValidValue!(value)\n}\n\nconst handleKeydownInput = async (event: Event | KeyboardEvent) => {\n if (props.readonly || pickerDisabled.value) return\n\n const code = getEventCode(event as KeyboardEvent)\n emitKeydown(event as KeyboardEvent)\n if (code === EVENT_CODE.esc) {\n if (pickerVisible.value === true) {\n pickerVisible.value = false\n event.preventDefault()\n event.stopPropagation()\n }\n return\n }\n\n if (code === EVENT_CODE.down) {\n if (pickerOptions.value.handleFocusPicker) {\n event.preventDefault()\n event.stopPropagation()\n }\n if (pickerVisible.value === false) {\n pickerVisible.value = true\n await nextTick()\n }\n if (pickerOptions.value.handleFocusPicker) {\n pickerOptions.value.handleFocusPicker()\n return\n }\n }\n\n if (code === EVENT_CODE.tab) {\n hasJustTabExitedInput = true\n return\n }\n\n if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {\n if (!pickerVisible.value) {\n pickerVisible.value = true\n } else if (\n userInput.value === null ||\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value) as DayOrDays)\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.preventDefault()\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n if (pickerOptions.value.handleKeydownInput) {\n pickerOptions.value.handleKeydownInput(event as KeyboardEvent)\n }\n}\nconst onUserInput = (e: string) => {\n userInput.value = e\n // Temporary fix when the picker is dismissed and the input box\n // is focused, just mimic the behavior of antdesign.\n if (!pickerVisible.value) {\n pickerVisible.value = true\n }\n}\n\nconst handleStartInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [target.value, userInput.value[1]]\n } else {\n userInput.value = [target.value, null]\n }\n}\n\nconst handleEndInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [userInput.value[0], target.value]\n } else {\n userInput.value = [null, target.value]\n }\n}\n\nconst handleStartChange = () => {\n const values = userInput.value as string[]\n const value = parseUserInputToDayjs(values && values[0]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n formatToString(value) as string,\n displayValue.value?.[1] || null,\n ]\n const newValue = [value, parsedVal && (parsedVal[1] || null)] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst handleEndChange = () => {\n const values = unref(userInput) as string[]\n const value = parseUserInputToDayjs(values && values[1]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n unref(displayValue)?.[0] || null,\n formatToString(value) as string,\n ]\n const newValue = [parsedVal && parsedVal[0], value] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nprovide(PICKER_BASE_INJECTION_KEY, {\n props,\n emptyValues,\n})\nprovide(ROOT_COMMON_PICKER_INJECTION_KEY, commonPicker)\n\ndefineExpose({\n /**\n * @description focus input box.\n */\n focus,\n /**\n * @description blur input box.\n */\n blur,\n /**\n * @description opens picker\n */\n handleOpen,\n /**\n * @description closes picker\n */\n handleClose,\n /**\n * @description pick item manually\n */\n onPick,\n})\n</script>\n"],"mappings":""}
@@ -213,6 +213,7 @@ declare const __VLS_base: vue.DefineComponent<{
213
213
  __epPropKey: true;
214
214
  };
215
215
  readonly editable: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
216
+ readonly saveOnBlur: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
216
217
  readonly prefixIcon: EpPropFinalized<(new (...args: any[]) => (string | vue.Component) & {}) | (() => string | vue.Component) | ((new (...args: any[]) => (string | vue.Component) & {}) | (() => string | vue.Component))[], unknown, unknown, "", boolean>;
217
218
  readonly size: {
218
219
  readonly type: vue.PropType<EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
@@ -224,7 +225,7 @@ declare const __VLS_base: vue.DefineComponent<{
224
225
  readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
225
226
  readonly placeholder: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
226
227
  readonly popperOptions: EpPropFinalized<(new (...args: any[]) => Partial<Options>) | (() => Partial<Options>) | ((new (...args: any[]) => Partial<Options>) | (() => Partial<Options>))[], unknown, unknown, () => {}, boolean>;
227
- readonly modelValue: EpPropFinalized<(new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null))[], unknown, unknown, "", boolean>;
228
+ readonly modelValue: EpPropFinalized<(new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null))[], unknown, unknown, "", boolean>;
228
229
  readonly rangeSeparator: EpPropFinalized<StringConstructor, unknown, unknown, "-", boolean>;
229
230
  readonly startPlaceholder: StringConstructor;
230
231
  readonly endPlaceholder: StringConstructor;
@@ -264,10 +265,10 @@ declare const __VLS_base: vue.DefineComponent<{
264
265
  onPick: (date?: any, visible?: boolean) => void;
265
266
  }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
266
267
  change: (...args: any[]) => void;
267
- clear: (...args: any[]) => void;
268
268
  "update:modelValue": (...args: any[]) => void;
269
269
  focus: (...args: any[]) => void;
270
270
  blur: (...args: any[]) => void;
271
+ clear: (...args: any[]) => void;
271
272
  keydown: (...args: any[]) => void;
272
273
  "calendar-change": (...args: any[]) => void;
273
274
  "panel-change": (...args: any[]) => void;
@@ -451,6 +452,7 @@ declare const __VLS_base: vue.DefineComponent<{
451
452
  __epPropKey: true;
452
453
  };
453
454
  readonly editable: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
455
+ readonly saveOnBlur: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
454
456
  readonly prefixIcon: EpPropFinalized<(new (...args: any[]) => (string | vue.Component) & {}) | (() => string | vue.Component) | ((new (...args: any[]) => (string | vue.Component) & {}) | (() => string | vue.Component))[], unknown, unknown, "", boolean>;
455
457
  readonly size: {
456
458
  readonly type: vue.PropType<EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
@@ -462,7 +464,7 @@ declare const __VLS_base: vue.DefineComponent<{
462
464
  readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
463
465
  readonly placeholder: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
464
466
  readonly popperOptions: EpPropFinalized<(new (...args: any[]) => Partial<Options>) | (() => Partial<Options>) | ((new (...args: any[]) => Partial<Options>) | (() => Partial<Options>))[], unknown, unknown, () => {}, boolean>;
465
- readonly modelValue: EpPropFinalized<(new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null))[], unknown, unknown, "", boolean>;
467
+ readonly modelValue: EpPropFinalized<(new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null))[], unknown, unknown, "", boolean>;
466
468
  readonly rangeSeparator: EpPropFinalized<StringConstructor, unknown, unknown, "-", boolean>;
467
469
  readonly startPlaceholder: StringConstructor;
468
470
  readonly endPlaceholder: StringConstructor;
@@ -484,14 +486,14 @@ declare const __VLS_base: vue.DefineComponent<{
484
486
  onFocus?: ((...args: any[]) => any) | undefined;
485
487
  onBlur?: ((...args: any[]) => any) | undefined;
486
488
  onKeydown?: ((...args: any[]) => any) | undefined;
487
- onClear?: ((...args: any[]) => any) | undefined;
488
489
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
490
+ onClear?: ((...args: any[]) => any) | undefined;
489
491
  "onCalendar-change"?: ((...args: any[]) => any) | undefined;
490
492
  "onPanel-change"?: ((...args: any[]) => any) | undefined;
491
493
  "onVisible-change"?: ((...args: any[]) => any) | undefined;
492
494
  }, {
493
495
  readonly type: string;
494
- readonly modelValue: EpPropMergeType<(new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null))[], unknown, unknown>;
496
+ readonly modelValue: EpPropMergeType<(new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null))[], unknown, unknown>;
495
497
  readonly placement: EpPropMergeType<(new (...args: any[]) => "top" | "auto" | "bottom" | "bottom-start" | "left" | "right" | "auto-start" | "auto-end" | "top-start" | "top-end" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end") | (() => _popperjs_core0.Placement) | ((new (...args: any[]) => "top" | "auto" | "bottom" | "bottom-start" | "left" | "right" | "auto-start" | "auto-end" | "top-start" | "top-end" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end") | (() => _popperjs_core0.Placement))[], _popperjs_core0.Placement, unknown>;
496
498
  readonly disabled: EpPropMergeType<BooleanConstructor, unknown, unknown>;
497
499
  readonly placeholder: string;
@@ -505,6 +507,7 @@ declare const __VLS_base: vue.DefineComponent<{
505
507
  readonly valueOnClear: EpPropMergeType<(new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null) | ((new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null))[], unknown, unknown>;
506
508
  readonly automaticDropdown: EpPropMergeType<BooleanConstructor, unknown, unknown>;
507
509
  readonly editable: EpPropMergeType<BooleanConstructor, unknown, unknown>;
510
+ readonly saveOnBlur: EpPropMergeType<BooleanConstructor, unknown, unknown>;
508
511
  readonly rangeSeparator: string;
509
512
  readonly shortcuts: unknown[];
510
513
  readonly showNow: EpPropMergeType<BooleanConstructor, unknown, unknown>;
@@ -67,7 +67,9 @@ var picker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue
67
67
  return !hasJustTabExitedInput && refPopper.value?.isFocusInsideContent(event);
68
68
  },
69
69
  afterBlur() {
70
- handleChange();
70
+ if (isTimePicker.value && !props.saveOnBlur) {
71
+ if (!valueIsEmpty.value) pickerOptions.value.handleCancel?.();
72
+ } else handleChange();
71
73
  pickerVisible.value = false;
72
74
  hasJustTabExitedInput = false;
73
75
  props.validateEvent && formItem?.validate("blur").catch((err) => require_error.debugWarn(err));
@@ -145,6 +147,7 @@ var picker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue
145
147
  const formattedValue = formatToString(parsedValue.value);
146
148
  if ((0, _vue_shared.isArray)(userInput.value)) return [userInput.value[0] || formattedValue && formattedValue[0] || "", userInput.value[1] || formattedValue && formattedValue[1] || ""];
147
149
  else if (userInput.value !== null) return userInput.value;
150
+ if (isTimePicker.value && valueIsEmpty.value && !props.saveOnBlur) return "";
148
151
  if (!isTimePicker.value && valueIsEmpty.value) return "";
149
152
  if (!pickerVisible.value && valueIsEmpty.value) return "";
150
153
  if (formattedValue) return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value ? formattedValue.join(", ") : formattedValue;
@@ -198,6 +201,7 @@ var picker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue
198
201
  stophandle?.();
199
202
  });
200
203
  const handleChange = () => {
204
+ if (isTimePicker.value && !props.saveOnBlur) return;
201
205
  if (userInput.value) {
202
206
  const value = parseUserInputToDayjs(displayValue.value);
203
207
  if (value) {
@@ -1 +1 @@
1
- {"version":3,"file":"picker.vue_vue_type_script_setup_true_lang.js","names":["$attrs","popperClass","popperStyle","fallbackPlacements","placement","id","name","placeholder","type","editable","readonly","ariaLabel","tabindex","clearIcon","startPlaceholder","endPlaceholder","rangeSeparator","format","dateFormat","timeFormat","unlinkPanels","defaultValue","showNow","showConfirm","showFooter","showWeekNumber"],"sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"refPopper\"\n :visible=\"pickerVisible\"\n effect=\"light\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n role=\"dialog\"\n teleported\n :transition=\"`${nsDate.namespace.value}-zoom-in-top`\"\n :popper-class=\"[`${nsDate.namespace.value}-picker__popper`, popperClass!]\"\n :popper-style=\"popperStyle\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :gpu-acceleration=\"false\"\n :placement=\"placement\"\n :stop-popper-mouse-event=\"false\"\n :hide-after=\"0\"\n persistent\n @before-show=\"onBeforeShow\"\n @show=\"onShow\"\n @hide=\"onHide\"\n >\n <template #default>\n <el-input\n v-if=\"!isRangeInput\"\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string\n \"\n ref=\"inputRef\"\n container-role=\"combobox\"\n :model-value=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n displayValue as string\n \"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string\n \"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n :class=\"[\n nsDate.b('editor'),\n nsDate.bm('editor', type),\n nsDate.is('focus', pickerVisible),\n $attrs.class,\n ]\"\n :style=\"$attrs.style\"\n :readonly=\"\n !editable ||\n readonly ||\n isDatesPicker ||\n isMonthsPicker ||\n isYearsPicker ||\n type === 'week'\n \"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n :validate-event=\"false\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeydownInput\"\n @change=\"handleChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @click.stop\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"nsInput.e('icon')\"\n @mousedown.prevent=\"onMouseDownInput\"\n @touchstart.passive=\"onTouchStartInput\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClearBtn && clearIcon\"\n :class=\"`${nsInput.e('icon')} clear-icon`\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <picker-range-trigger\n v-else\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string[]\n \"\n ref=\"inputRef\"\n :model-value=\"displayValue\"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string[]\n \"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n :start-placeholder=\"startPlaceholder\"\n :end-placeholder=\"endPlaceholder\"\n :class=\"rangeInputKls\"\n :style=\"$attrs.style\"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n autocomplete=\"off\"\n role=\"combobox\"\n @click=\"onMouseDownInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @start-input=\"handleStartInput\"\n @start-change=\"handleStartChange\"\n @end-input=\"handleEndInput\"\n @end-change=\"handleEndChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @keydown=\"handleKeydownInput\"\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"[nsInput.e('icon'), nsRange.e('icon')]\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #range-separator>\n <slot name=\"range-separator\">\n <span :class=\"nsRange.b('separator')\">{{ rangeSeparator }}</span>\n </slot>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearIcon\"\n :class=\"clearIconKls\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </picker-range-trigger>\n </template>\n <template #content>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :date-format=\"dateFormat\"\n :time-format=\"timeFormat\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n :show-now=\"showNow\"\n :show-confirm=\"showConfirm\"\n :show-footer=\"showFooter\"\n :show-week-number=\"showWeekNumber\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @clear=\"onClear\"\n @panel-change=\"onPanelChange\"\n @mousedown.stop\n />\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n inject,\n nextTick,\n onBeforeUnmount,\n provide,\n ref,\n unref,\n useAttrs,\n watch,\n} from 'vue'\nimport { onClickOutside, unrefElement } from '@vueuse/core'\nimport {\n useEmptyValues,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport { NOOP, debugWarn, getEventCode, isArray } from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { Calendar, Clock } from '@element-plus/icons-vue'\nimport { dayOrDaysToDate, valueEquals } from '../utils'\nimport {\n PICKER_BASE_INJECTION_KEY,\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n ROOT_COMMON_PICKER_INJECTION_KEY,\n} from '../constants'\nimport { useCommonPicker } from '../composables/use-common-picker'\nimport { timePickerDefaultProps } from './props'\nimport PickerRangeTrigger from './picker-range-trigger.vue'\n\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { Dayjs } from 'dayjs'\nimport type { ComponentPublicInstance, Ref } from 'vue'\nimport type { Options } from '@popperjs/core'\nimport type { DayOrDays, TimePickerDefaultProps, UserInput } from './props'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\n\ndefineOptions({\n name: 'Picker',\n})\n\nconst props = defineProps(timePickerDefaultProps)\nconst emit = defineEmits([\n UPDATE_MODEL_EVENT,\n CHANGE_EVENT,\n 'focus',\n 'blur',\n 'clear',\n 'calendar-change',\n 'panel-change',\n 'visible-change',\n 'keydown',\n])\nconst attrs = useAttrs()\n\nconst nsDate = useNamespace('date')\nconst nsInput = useNamespace('input')\nconst nsRange = useNamespace('range')\n\nconst { formItem } = useFormItem()\nconst elPopperOptions = inject(\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n {} as Options\n)\nconst emptyValues = useEmptyValues(props, null)\n\nconst refPopper = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst valueOnOpen = ref<TimePickerDefaultProps['modelValue'] | null>(null)\nlet hasJustTabExitedInput = false\n\nconst pickerDisabled = useFormDisabled()\n\nconst commonPicker = useCommonPicker(props, emit)\nconst {\n parsedValue,\n pickerActualVisible,\n userInput,\n pickerVisible,\n pickerOptions,\n valueIsEmpty,\n emitInput,\n onPick,\n onSetPickerOption,\n onCalendarChange,\n onPanelChange,\n} = commonPicker\n\nconst { isFocused, handleFocus, handleBlur } = useFocusController(inputRef, {\n disabled: pickerDisabled,\n beforeFocus() {\n return props.readonly\n },\n afterFocus() {\n if (!props.automaticDropdown) return\n pickerVisible.value = true\n },\n beforeBlur(event) {\n return (\n !hasJustTabExitedInput && refPopper.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n handleChange()\n pickerVisible.value = false\n hasJustTabExitedInput = false\n props.validateEvent &&\n formItem?.validate('blur').catch((err) => debugWarn(err))\n },\n})\n\nconst hovering = ref(false)\n\nconst rangeInputKls = computed(() => [\n nsDate.b('editor'),\n nsDate.bm('editor', props.type),\n nsInput.e('wrapper'),\n nsDate.is('disabled', pickerDisabled.value),\n nsDate.is('active', pickerVisible.value),\n nsRange.b('editor'),\n pickerSize ? nsRange.bm('editor', pickerSize.value) : '',\n attrs.class,\n])\n\nconst clearIconKls = computed(() => [\n nsInput.e('icon'),\n nsRange.e('close-icon'),\n !showClearBtn.value ? nsRange.em('close-icon', 'hidden') : '',\n])\n\nwatch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n } else {\n nextTick(() => {\n if (val) {\n valueOnOpen.value = props.modelValue\n }\n })\n }\n})\nconst emitChange = (\n val: TimePickerDefaultProps['modelValue'] | null,\n isClear?: boolean\n) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n emit(CHANGE_EVENT, val)\n // Set the value of valueOnOpen when clearing to avoid triggering change events multiple times.\n isClear && (valueOnOpen.value = val)\n props.validateEvent &&\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n}\nconst emitKeydown = (e: KeyboardEvent) => {\n emit('keydown', e)\n}\n\nconst refInput = computed<HTMLInputElement[]>(() => {\n if (inputRef.value) {\n return Array.from<HTMLInputElement>(\n inputRef.value.$el.querySelectorAll('input')\n )\n }\n return []\n})\n\n// @ts-ignore\nconst setSelectionRange = (start: number, end: number, pos?: 'min' | 'max') => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n}\n\nconst onBeforeShow = () => {\n pickerActualVisible.value = true\n}\n\nconst onShow = () => {\n emit('visible-change', true)\n}\n\nconst onHide = () => {\n pickerActualVisible.value = false\n pickerVisible.value = false\n emit('visible-change', false)\n}\n\nconst handleOpen = () => {\n pickerVisible.value = true\n}\n\nconst handleClose = () => {\n pickerVisible.value = false\n}\n\nconst displayValue = computed<UserInput>(() => {\n const formattedValue = formatToString(parsedValue.value)\n if (isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (!isTimePicker.value && valueIsEmpty.value) return ''\n if (!pickerVisible.value && valueIsEmpty.value) return ''\n if (formattedValue) {\n return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n})\n\nconst isTimeLikePicker = computed(() => props.type.includes('time'))\n\nconst isTimePicker = computed(() => props.type.startsWith('time'))\n\nconst isDatesPicker = computed(() => props.type === 'dates')\n\nconst isMonthsPicker = computed(() => props.type === 'months')\n\nconst isYearsPicker = computed(() => props.type === 'years')\n\nconst triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n)\n\nconst showClearBtn = computed(\n () =>\n props.clearable &&\n !pickerDisabled.value &&\n !props.readonly &&\n !valueIsEmpty.value &&\n (hovering.value || isFocused.value)\n)\n\nconst onClear = (event?: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClearBtn.value) {\n event?.stopPropagation()\n // When the handleClear Function was provided, emit null will be executed inside it\n // There is no need for us to execute emit null twice. #14752\n if (pickerOptions.value.handleClear) {\n pickerOptions.value.handleClear()\n } else {\n emitInput(emptyValues.valueOnClear.value)\n }\n emitChange(emptyValues.valueOnClear.value, true)\n onHide()\n }\n emit('clear')\n}\n\nconst onMouseDownInput = async (event: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\nconst onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n hovering.value = true\n }\n}\nconst onMouseLeave = () => {\n hovering.value = false\n}\n\nconst onTouchStartInput = (event: TouchEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.touches[0].target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\n\nconst isRangeInput = computed(() => {\n return props.type.includes('range')\n})\n\nconst pickerSize = useFormSize()\n\nconst popperEl = computed(() => unref(refPopper)?.popperRef?.contentRef)\n\nconst stophandle = onClickOutside(\n inputRef as Ref<ComponentPublicInstance>,\n (e: PointerEvent) => {\n const unrefedPopperEl = unref(popperEl)\n const inputEl = unrefElement(inputRef as Ref<ComponentPublicInstance>)\n if (\n (unrefedPopperEl &&\n (e.target === unrefedPopperEl ||\n e.composedPath().includes(unrefedPopperEl))) ||\n e.target === inputEl ||\n (inputEl && e.composedPath().includes(inputEl))\n )\n return\n pickerVisible.value = false\n }\n)\n\nonBeforeUnmount(() => {\n stophandle?.()\n})\n\nconst handleChange = () => {\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(dayOrDaysToDate(value))\n }\n userInput.value = null\n }\n }\n if (userInput.value === '') {\n emitInput(emptyValues.valueOnClear.value)\n emitChange(emptyValues.valueOnClear.value, true)\n userInput.value = null\n }\n}\n\nconst parseUserInputToDayjs = (value: UserInput) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput!(value)\n}\n\nconst formatToString = (value: DayOrDays) => {\n if (!value) return null\n const res = isArray(value)\n ? value.map((_) => _.format(props.format))\n : value.format(props.format)\n return res as UserInput\n}\n\nconst isValidValue = (value: DayOrDays) => {\n return pickerOptions.value.isValidValue!(value)\n}\n\nconst handleKeydownInput = async (event: Event | KeyboardEvent) => {\n if (props.readonly || pickerDisabled.value) return\n\n const code = getEventCode(event as KeyboardEvent)\n emitKeydown(event as KeyboardEvent)\n if (code === EVENT_CODE.esc) {\n if (pickerVisible.value === true) {\n pickerVisible.value = false\n event.preventDefault()\n event.stopPropagation()\n }\n return\n }\n\n if (code === EVENT_CODE.down) {\n if (pickerOptions.value.handleFocusPicker) {\n event.preventDefault()\n event.stopPropagation()\n }\n if (pickerVisible.value === false) {\n pickerVisible.value = true\n await nextTick()\n }\n if (pickerOptions.value.handleFocusPicker) {\n pickerOptions.value.handleFocusPicker()\n return\n }\n }\n\n if (code === EVENT_CODE.tab) {\n hasJustTabExitedInput = true\n return\n }\n\n if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {\n if (!pickerVisible.value) {\n pickerVisible.value = true\n } else if (\n userInput.value === null ||\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value) as DayOrDays)\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.preventDefault()\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n if (pickerOptions.value.handleKeydownInput) {\n pickerOptions.value.handleKeydownInput(event as KeyboardEvent)\n }\n}\nconst onUserInput = (e: string) => {\n userInput.value = e\n // Temporary fix when the picker is dismissed and the input box\n // is focused, just mimic the behavior of antdesign.\n if (!pickerVisible.value) {\n pickerVisible.value = true\n }\n}\n\nconst handleStartInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [target.value, userInput.value[1]]\n } else {\n userInput.value = [target.value, null]\n }\n}\n\nconst handleEndInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [userInput.value[0], target.value]\n } else {\n userInput.value = [null, target.value]\n }\n}\n\nconst handleStartChange = () => {\n const values = userInput.value as string[]\n const value = parseUserInputToDayjs(values && values[0]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n formatToString(value) as string,\n displayValue.value?.[1] || null,\n ]\n const newValue = [value, parsedVal && (parsedVal[1] || null)] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst handleEndChange = () => {\n const values = unref(userInput) as string[]\n const value = parseUserInputToDayjs(values && values[1]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n unref(displayValue)?.[0] || null,\n formatToString(value) as string,\n ]\n const newValue = [parsedVal && parsedVal[0], value] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nprovide(PICKER_BASE_INJECTION_KEY, {\n props,\n emptyValues,\n})\nprovide(ROOT_COMMON_PICKER_INJECTION_KEY, commonPicker)\n\ndefineExpose({\n /**\n * @description focus input box.\n */\n focus,\n /**\n * @description blur input box.\n */\n blur,\n /**\n * @description opens picker\n */\n handleOpen,\n /**\n * @description closes picker\n */\n handleClose,\n /**\n * @description pick item manually\n */\n onPick,\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"picker.vue_vue_type_script_setup_true_lang.js","names":["$attrs","popperClass","popperStyle","fallbackPlacements","placement","id","name","placeholder","type","editable","readonly","ariaLabel","tabindex","clearIcon","startPlaceholder","endPlaceholder","rangeSeparator","format","dateFormat","timeFormat","unlinkPanels","defaultValue","showNow","showConfirm","showFooter","showWeekNumber"],"sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"refPopper\"\n :visible=\"pickerVisible\"\n effect=\"light\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n role=\"dialog\"\n teleported\n :transition=\"`${nsDate.namespace.value}-zoom-in-top`\"\n :popper-class=\"[`${nsDate.namespace.value}-picker__popper`, popperClass!]\"\n :popper-style=\"popperStyle\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :gpu-acceleration=\"false\"\n :placement=\"placement\"\n :stop-popper-mouse-event=\"false\"\n :hide-after=\"0\"\n persistent\n @before-show=\"onBeforeShow\"\n @show=\"onShow\"\n @hide=\"onHide\"\n >\n <template #default>\n <el-input\n v-if=\"!isRangeInput\"\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string\n \"\n ref=\"inputRef\"\n container-role=\"combobox\"\n :model-value=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n displayValue as string\n \"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string\n \"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n :class=\"[\n nsDate.b('editor'),\n nsDate.bm('editor', type),\n nsDate.is('focus', pickerVisible),\n $attrs.class,\n ]\"\n :style=\"$attrs.style\"\n :readonly=\"\n !editable ||\n readonly ||\n isDatesPicker ||\n isMonthsPicker ||\n isYearsPicker ||\n type === 'week'\n \"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n :validate-event=\"false\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeydownInput\"\n @change=\"handleChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @click.stop\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"nsInput.e('icon')\"\n @mousedown.prevent=\"onMouseDownInput\"\n @touchstart.passive=\"onTouchStartInput\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClearBtn && clearIcon\"\n :class=\"`${nsInput.e('icon')} clear-icon`\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <picker-range-trigger\n v-else\n :id=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n id as string[]\n \"\n ref=\"inputRef\"\n :model-value=\"displayValue\"\n :name=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n name as string[]\n \"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n :start-placeholder=\"startPlaceholder\"\n :end-placeholder=\"endPlaceholder\"\n :class=\"rangeInputKls\"\n :style=\"$attrs.style\"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n autocomplete=\"off\"\n role=\"combobox\"\n @click=\"onMouseDownInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @start-input=\"handleStartInput\"\n @start-change=\"handleStartChange\"\n @end-input=\"handleEndInput\"\n @end-change=\"handleEndChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @keydown=\"handleKeydownInput\"\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"[nsInput.e('icon'), nsRange.e('icon')]\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #range-separator>\n <slot name=\"range-separator\">\n <span :class=\"nsRange.b('separator')\">{{ rangeSeparator }}</span>\n </slot>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearIcon\"\n :class=\"clearIconKls\"\n @mousedown.prevent=\"NOOP\"\n @click=\"onClear\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </picker-range-trigger>\n </template>\n <template #content>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :date-format=\"dateFormat\"\n :time-format=\"timeFormat\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n :show-now=\"showNow\"\n :show-confirm=\"showConfirm\"\n :show-footer=\"showFooter\"\n :show-week-number=\"showWeekNumber\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @clear=\"onClear\"\n @panel-change=\"onPanelChange\"\n @mousedown.stop\n />\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n inject,\n nextTick,\n onBeforeUnmount,\n provide,\n ref,\n unref,\n useAttrs,\n watch,\n} from 'vue'\nimport { onClickOutside, unrefElement } from '@vueuse/core'\nimport {\n useEmptyValues,\n useFocusController,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport { NOOP, debugWarn, getEventCode, isArray } from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { Calendar, Clock } from '@element-plus/icons-vue'\nimport { dayOrDaysToDate, valueEquals } from '../utils'\nimport {\n PICKER_BASE_INJECTION_KEY,\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n ROOT_COMMON_PICKER_INJECTION_KEY,\n} from '../constants'\nimport { useCommonPicker } from '../composables/use-common-picker'\nimport { timePickerDefaultProps } from './props'\nimport PickerRangeTrigger from './picker-range-trigger.vue'\n\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { Dayjs } from 'dayjs'\nimport type { ComponentPublicInstance, Ref } from 'vue'\nimport type { Options } from '@popperjs/core'\nimport type { DayOrDays, TimePickerDefaultProps, UserInput } from './props'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\n\ndefineOptions({\n name: 'Picker',\n})\n\nconst props = defineProps(timePickerDefaultProps)\nconst emit = defineEmits([\n UPDATE_MODEL_EVENT,\n CHANGE_EVENT,\n 'focus',\n 'blur',\n 'clear',\n 'calendar-change',\n 'panel-change',\n 'visible-change',\n 'keydown',\n])\nconst attrs = useAttrs()\n\nconst nsDate = useNamespace('date')\nconst nsInput = useNamespace('input')\nconst nsRange = useNamespace('range')\n\nconst { formItem } = useFormItem()\nconst elPopperOptions = inject(\n PICKER_POPPER_OPTIONS_INJECTION_KEY,\n {} as Options\n)\nconst emptyValues = useEmptyValues(props, null)\n\nconst refPopper = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst valueOnOpen = ref<TimePickerDefaultProps['modelValue'] | null>(null)\nlet hasJustTabExitedInput = false\n\nconst pickerDisabled = useFormDisabled()\n\nconst commonPicker = useCommonPicker(props, emit)\nconst {\n parsedValue,\n pickerActualVisible,\n userInput,\n pickerVisible,\n pickerOptions,\n valueIsEmpty,\n emitInput,\n onPick,\n onSetPickerOption,\n onCalendarChange,\n onPanelChange,\n} = commonPicker\n\nconst { isFocused, handleFocus, handleBlur } = useFocusController(inputRef, {\n disabled: pickerDisabled,\n beforeFocus() {\n return props.readonly\n },\n afterFocus() {\n if (!props.automaticDropdown) return\n pickerVisible.value = true\n },\n beforeBlur(event) {\n return (\n !hasJustTabExitedInput && refPopper.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n if (isTimePicker.value && !props.saveOnBlur) {\n if (!valueIsEmpty.value) {\n pickerOptions.value.handleCancel?.()\n }\n } else {\n handleChange()\n }\n pickerVisible.value = false\n hasJustTabExitedInput = false\n props.validateEvent &&\n formItem?.validate('blur').catch((err) => debugWarn(err))\n },\n})\n\nconst hovering = ref(false)\n\nconst rangeInputKls = computed(() => [\n nsDate.b('editor'),\n nsDate.bm('editor', props.type),\n nsInput.e('wrapper'),\n nsDate.is('disabled', pickerDisabled.value),\n nsDate.is('active', pickerVisible.value),\n nsRange.b('editor'),\n pickerSize ? nsRange.bm('editor', pickerSize.value) : '',\n attrs.class,\n])\n\nconst clearIconKls = computed(() => [\n nsInput.e('icon'),\n nsRange.e('close-icon'),\n !showClearBtn.value ? nsRange.em('close-icon', 'hidden') : '',\n])\n\nwatch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n } else {\n nextTick(() => {\n if (val) {\n valueOnOpen.value = props.modelValue\n }\n })\n }\n})\nconst emitChange = (\n val: TimePickerDefaultProps['modelValue'] | null,\n isClear?: boolean\n) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n emit(CHANGE_EVENT, val)\n // Set the value of valueOnOpen when clearing to avoid triggering change events multiple times.\n isClear && (valueOnOpen.value = val)\n props.validateEvent &&\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n}\nconst emitKeydown = (e: KeyboardEvent) => {\n emit('keydown', e)\n}\n\nconst refInput = computed<HTMLInputElement[]>(() => {\n if (inputRef.value) {\n return Array.from<HTMLInputElement>(\n inputRef.value.$el.querySelectorAll('input')\n )\n }\n return []\n})\n\n// @ts-ignore\nconst setSelectionRange = (start: number, end: number, pos?: 'min' | 'max') => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n}\n\nconst onBeforeShow = () => {\n pickerActualVisible.value = true\n}\n\nconst onShow = () => {\n emit('visible-change', true)\n}\n\nconst onHide = () => {\n pickerActualVisible.value = false\n pickerVisible.value = false\n emit('visible-change', false)\n}\n\nconst handleOpen = () => {\n pickerVisible.value = true\n}\n\nconst handleClose = () => {\n pickerVisible.value = false\n}\n\nconst displayValue = computed<UserInput>(() => {\n const formattedValue = formatToString(parsedValue.value)\n if (isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (isTimePicker.value && valueIsEmpty.value && !props.saveOnBlur) return ''\n if (!isTimePicker.value && valueIsEmpty.value) return ''\n if (!pickerVisible.value && valueIsEmpty.value) return ''\n if (formattedValue) {\n return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n})\n\nconst isTimeLikePicker = computed(() => props.type.includes('time'))\n\nconst isTimePicker = computed(() => props.type.startsWith('time'))\n\nconst isDatesPicker = computed(() => props.type === 'dates')\n\nconst isMonthsPicker = computed(() => props.type === 'months')\n\nconst isYearsPicker = computed(() => props.type === 'years')\n\nconst triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n)\n\nconst showClearBtn = computed(\n () =>\n props.clearable &&\n !pickerDisabled.value &&\n !props.readonly &&\n !valueIsEmpty.value &&\n (hovering.value || isFocused.value)\n)\n\nconst onClear = (event?: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClearBtn.value) {\n event?.stopPropagation()\n // When the handleClear Function was provided, emit null will be executed inside it\n // There is no need for us to execute emit null twice. #14752\n if (pickerOptions.value.handleClear) {\n pickerOptions.value.handleClear()\n } else {\n emitInput(emptyValues.valueOnClear.value)\n }\n emitChange(emptyValues.valueOnClear.value, true)\n onHide()\n }\n emit('clear')\n}\n\nconst onMouseDownInput = async (event: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\nconst onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n hovering.value = true\n }\n}\nconst onMouseLeave = () => {\n hovering.value = false\n}\n\nconst onTouchStartInput = (event: TouchEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.touches[0].target as HTMLElement)?.tagName !== 'INPUT' ||\n isFocused.value ||\n !props.automaticDropdown\n ) {\n pickerVisible.value = true\n }\n}\n\nconst isRangeInput = computed(() => {\n return props.type.includes('range')\n})\n\nconst pickerSize = useFormSize()\n\nconst popperEl = computed(() => unref(refPopper)?.popperRef?.contentRef)\n\nconst stophandle = onClickOutside(\n inputRef as Ref<ComponentPublicInstance>,\n (e: PointerEvent) => {\n const unrefedPopperEl = unref(popperEl)\n const inputEl = unrefElement(inputRef as Ref<ComponentPublicInstance>)\n if (\n (unrefedPopperEl &&\n (e.target === unrefedPopperEl ||\n e.composedPath().includes(unrefedPopperEl))) ||\n e.target === inputEl ||\n (inputEl && e.composedPath().includes(inputEl))\n )\n return\n pickerVisible.value = false\n }\n)\n\nonBeforeUnmount(() => {\n stophandle?.()\n})\n\nconst handleChange = () => {\n if (isTimePicker.value && !props.saveOnBlur) return\n\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(dayOrDaysToDate(value))\n }\n userInput.value = null\n }\n }\n if (userInput.value === '') {\n emitInput(emptyValues.valueOnClear.value)\n emitChange(emptyValues.valueOnClear.value, true)\n userInput.value = null\n }\n}\n\nconst parseUserInputToDayjs = (value: UserInput) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput!(value)\n}\n\nconst formatToString = (value: DayOrDays) => {\n if (!value) return null\n const res = isArray(value)\n ? value.map((_) => _.format(props.format))\n : value.format(props.format)\n return res as UserInput\n}\n\nconst isValidValue = (value: DayOrDays) => {\n return pickerOptions.value.isValidValue!(value)\n}\n\nconst handleKeydownInput = async (event: Event | KeyboardEvent) => {\n if (props.readonly || pickerDisabled.value) return\n\n const code = getEventCode(event as KeyboardEvent)\n emitKeydown(event as KeyboardEvent)\n if (code === EVENT_CODE.esc) {\n if (pickerVisible.value === true) {\n pickerVisible.value = false\n event.preventDefault()\n event.stopPropagation()\n }\n return\n }\n\n if (code === EVENT_CODE.down) {\n if (pickerOptions.value.handleFocusPicker) {\n event.preventDefault()\n event.stopPropagation()\n }\n if (pickerVisible.value === false) {\n pickerVisible.value = true\n await nextTick()\n }\n if (pickerOptions.value.handleFocusPicker) {\n pickerOptions.value.handleFocusPicker()\n return\n }\n }\n\n if (code === EVENT_CODE.tab) {\n hasJustTabExitedInput = true\n return\n }\n\n if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {\n if (!pickerVisible.value) {\n pickerVisible.value = true\n } else if (\n userInput.value === null ||\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value) as DayOrDays)\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.preventDefault()\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n if (pickerOptions.value.handleKeydownInput) {\n pickerOptions.value.handleKeydownInput(event as KeyboardEvent)\n }\n}\nconst onUserInput = (e: string) => {\n userInput.value = e\n // Temporary fix when the picker is dismissed and the input box\n // is focused, just mimic the behavior of antdesign.\n if (!pickerVisible.value) {\n pickerVisible.value = true\n }\n}\n\nconst handleStartInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [target.value, userInput.value[1]]\n } else {\n userInput.value = [target.value, null]\n }\n}\n\nconst handleEndInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [userInput.value[0], target.value]\n } else {\n userInput.value = [null, target.value]\n }\n}\n\nconst handleStartChange = () => {\n const values = userInput.value as string[]\n const value = parseUserInputToDayjs(values && values[0]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n formatToString(value) as string,\n displayValue.value?.[1] || null,\n ]\n const newValue = [value, parsedVal && (parsedVal[1] || null)] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst handleEndChange = () => {\n const values = unref(userInput) as string[]\n const value = parseUserInputToDayjs(values && values[1]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n unref(displayValue)?.[0] || null,\n formatToString(value) as string,\n ]\n const newValue = [parsedVal && parsedVal[0], value] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(dayOrDaysToDate(newValue))\n userInput.value = null\n }\n }\n}\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nprovide(PICKER_BASE_INJECTION_KEY, {\n props,\n emptyValues,\n})\nprovide(ROOT_COMMON_PICKER_INJECTION_KEY, commonPicker)\n\ndefineExpose({\n /**\n * @description focus input box.\n */\n focus,\n /**\n * @description blur input box.\n */\n blur,\n /**\n * @description opens picker\n */\n handleOpen,\n /**\n * @description closes picker\n */\n handleClose,\n /**\n * @description pick item manually\n */\n onPick,\n})\n</script>\n"],"mappings":"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"}
@@ -195,6 +195,7 @@ declare const timePickerDefaultProps: {
195
195
  __epPropKey: true;
196
196
  };
197
197
  readonly editable: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
198
+ readonly saveOnBlur: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
198
199
  readonly prefixIcon: EpPropFinalized<(new (...args: any[]) => (string | Component) & {}) | (() => string | Component) | ((new (...args: any[]) => (string | Component) & {}) | (() => string | Component))[], unknown, unknown, "", boolean>;
199
200
  readonly size: {
200
201
  readonly type: vue.PropType<EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
@@ -206,7 +207,7 @@ declare const timePickerDefaultProps: {
206
207
  readonly disabled: EpPropFinalized<BooleanConstructor, unknown, unknown, undefined, boolean>;
207
208
  readonly placeholder: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
208
209
  readonly popperOptions: EpPropFinalized<(new (...args: any[]) => Partial<Options>) | (() => Partial<Options>) | ((new (...args: any[]) => Partial<Options>) | (() => Partial<Options>))[], unknown, unknown, () => {}, boolean>;
209
- readonly modelValue: EpPropFinalized<(new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | number[] | Date | Date[]) | (() => ModelValueType | null))[], unknown, unknown, "", boolean>;
210
+ readonly modelValue: EpPropFinalized<(new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null) | ((new (...args: any[]) => string | number | string[] | Date | number[] | Date[]) | (() => ModelValueType | null))[], unknown, unknown, "", boolean>;
210
211
  readonly rangeSeparator: EpPropFinalized<StringConstructor, unknown, unknown, "-", boolean>;
211
212
  readonly startPlaceholder: StringConstructor;
212
213
  readonly endPlaceholder: StringConstructor;
@@ -235,6 +236,7 @@ interface PickerOptions {
235
236
  panelReady: boolean;
236
237
  handleClear: () => void;
237
238
  handleFocusPicker?: () => void;
239
+ handleCancel?: () => void;
238
240
  }
239
241
  declare const timePickerRangeTriggerProps: {
240
242
  readonly id: {
@@ -39,6 +39,10 @@ const timePickerDefaultProps = require_runtime$1.buildProps({
39
39
  type: Boolean,
40
40
  default: true
41
41
  },
42
+ saveOnBlur: {
43
+ type: Boolean,
44
+ default: true
45
+ },
42
46
  prefixIcon: {
43
47
  type: require_runtime$1.definePropType([String, Object]),
44
48
  default: ""
@@ -1 +1 @@
1
- {"version":3,"file":"props.js","names":["buildProps","definePropType","useTooltipContentProps","CircleClose","useSizeProp","disabledTimeListsProps","placements","useEmptyValuesProps","useAriaProps"],"sources":["../../../../../../../packages/components/time-picker/src/common/props.ts"],"sourcesContent":["import { placements } from '@popperjs/core'\nimport { buildProps, definePropType } from '@element-plus/utils'\nimport {\n useAriaProps,\n useEmptyValuesProps,\n useSizeProp,\n} from '@element-plus/hooks'\nimport { useTooltipContentProps } from '@element-plus/components/tooltip'\nimport { CircleClose } from '@element-plus/icons-vue'\nimport { disabledTimeListsProps } from '../props/shared'\n\nimport type { Component, ExtractPropTypes, ExtractPublicPropTypes } from 'vue'\nimport type { Options } from '@popperjs/core'\nimport type { Dayjs } from 'dayjs'\nimport type { Placement } from '@element-plus/components/popper'\n\nexport type SingleOrRange<T> = T | [T, T]\nexport type DateModelType = number | string | Date\nexport type ModelValueType = DateModelType | number[] | string[] | Date[]\nexport type DayOrDays = SingleOrRange<Dayjs>\nexport type DateOrDates = SingleOrRange<Date>\nexport type UserInput = SingleOrRange<string | null>\nexport type GetDisabledHours = (role: string, comparingDate?: Dayjs) => number[]\nexport type GetDisabledMinutes = (\n hour: number,\n role: string,\n comparingDate?: Dayjs\n) => number[]\nexport type GetDisabledSeconds = (\n hour: number,\n minute: number,\n role: string,\n comparingDate?: Dayjs\n) => number[]\n\nexport const timePickerDefaultProps = buildProps({\n /**\n * @description this prop decides if the date picker panel pops up when the input is focused\n */\n automaticDropdown: {\n type: Boolean,\n default: true,\n },\n /**\n * @description same as `id` in native input\n */\n id: {\n type: definePropType<SingleOrRange<string>>([Array, String]),\n },\n /**\n * @description same as `name` in native input\n */\n name: {\n type: definePropType<SingleOrRange<string>>([Array, String]),\n },\n /**\n * @description custom class name for TimePicker's dropdown\n */\n popperClass: useTooltipContentProps.popperClass,\n /**\n * @description custom style for TimePicker's dropdown\n */\n popperStyle: useTooltipContentProps.popperStyle,\n /**\n * @description format of the displayed value in the input box\n */\n format: String,\n /**\n * @description optional, format of binding value. If not specified, the binding value will be a Date object\n */\n valueFormat: String,\n /**\n * @description optional, format of the date displayed in input's inner panel\n */\n dateFormat: String,\n /**\n * @description optional, format of the time displayed in input's inner panel\n */\n timeFormat: String,\n /**\n * @description type of the picker\n */\n type: {\n type: String,\n default: '',\n },\n /**\n * @description whether to show clear button\n */\n clearable: {\n type: Boolean,\n default: true,\n },\n /**\n * @description Custom clear icon component\n */\n clearIcon: {\n type: definePropType<string | Component>([String, Object]),\n default: CircleClose,\n },\n /**\n * @description whether the input is editable\n */\n editable: {\n type: Boolean,\n default: true,\n },\n /**\n * @description Custom prefix icon component\n */\n prefixIcon: {\n type: definePropType<string | Component>([String, Object]),\n default: '',\n },\n /**\n * @description size of Input\n */\n size: useSizeProp,\n /**\n * @description whether TimePicker is read only\n */\n readonly: Boolean,\n /**\n * @description whether TimePicker is disabled\n */\n disabled: {\n type: Boolean,\n default: undefined,\n },\n /**\n * @description placeholder in non-range mode\n */\n placeholder: {\n type: String,\n default: '',\n },\n /**\n * @description [popper.js](https://popper.js.org/docs/v2/) parameters\n */\n popperOptions: {\n type: definePropType<Partial<Options>>(Object),\n default: () => ({}),\n },\n /**\n * @description binding value, if it is an array, the length should be 2\n */\n modelValue: {\n type: definePropType<ModelValueType | null>([Date, Array, String, Number]),\n default: '',\n },\n /**\n * @description range separator\n */\n rangeSeparator: {\n type: String,\n default: '-',\n },\n /**\n * @description placeholder for the start date in range mode\n */\n startPlaceholder: String,\n /**\n * @description placeholder for the end date in range mode\n */\n endPlaceholder: String,\n /**\n * @description optional, default date of the calendar\n */\n defaultValue: {\n type: definePropType<SingleOrRange<Date>>([Date, Array]),\n },\n /**\n * @description optional, the time value to use when selecting date range\n */\n defaultTime: {\n type: definePropType<SingleOrRange<Date>>([Date, Array]),\n },\n /**\n * @description whether to pick a time range\n */\n isRange: Boolean,\n ...disabledTimeListsProps,\n /**\n * @description a function determining if a date is disabled with that date as its parameter. Should return a Boolean\n */\n disabledDate: {\n type: Function,\n },\n /**\n * @description set custom className\n */\n cellClassName: {\n type: Function,\n },\n /**\n * @description an object array to set shortcut options\n */\n shortcuts: {\n type: Array,\n default: () => [],\n },\n /**\n * @description whether to pick time using arrow buttons\n */\n arrowControl: Boolean,\n /**\n * @description input tabindex\n */\n tabindex: {\n type: definePropType<string | number>([String, Number]),\n default: 0,\n },\n /**\n * @description whether to trigger form validation\n */\n validateEvent: {\n type: Boolean,\n default: true,\n },\n /**\n * @description unlink two date-panels in range-picker\n */\n unlinkPanels: Boolean,\n /**\n * @description position of dropdown\n */\n placement: {\n type: definePropType<Placement>(String),\n values: placements,\n default: 'bottom',\n },\n /**\n * @description list of possible positions for dropdown\n */\n fallbackPlacements: {\n type: definePropType<Placement[]>(Array),\n default: ['bottom', 'top', 'right', 'left'],\n },\n ...useEmptyValuesProps,\n ...useAriaProps(['ariaLabel']),\n /**\n * @description whether to show the now button\n */\n showNow: {\n type: Boolean,\n default: true,\n },\n /**\n * @description whether to show footer\n */\n showConfirm: {\n type: Boolean,\n default: true,\n },\n /**\n * @description whether to show footer\n */\n showFooter: {\n type: Boolean,\n default: true,\n },\n /**\n * @description whether to show the number of the calendar week\n */\n showWeekNumber: Boolean,\n} as const)\n\nexport type TimePickerDefaultProps = ExtractPropTypes<\n typeof timePickerDefaultProps\n>\nexport type TimePickerDefaultPropsPublic = ExtractPublicPropTypes<\n typeof timePickerDefaultProps\n>\n\nexport interface PickerOptions {\n isValidValue: (date: DayOrDays) => boolean\n handleKeydownInput: (event: KeyboardEvent) => void\n parseUserInput: (value: UserInput) => DayOrDays\n getRangeAvailableTime: (date: DayOrDays) => DayOrDays\n getDefaultValue: () => DayOrDays\n panelReady: boolean\n handleClear: () => void\n handleFocusPicker?: () => void\n}\n\nexport const timePickerRangeTriggerProps = buildProps({\n id: {\n type: definePropType<string[]>(Array),\n },\n name: {\n type: definePropType<string[]>(Array),\n },\n modelValue: {\n type: definePropType<UserInput>([Array, String]),\n },\n startPlaceholder: String,\n endPlaceholder: String,\n disabled: Boolean,\n} as const)\n\n/**\n * @deprecated Use `timePickerRangeTriggerProps` instead. This will be removed in future versions.\n */\nexport const timePickerRngeTriggerProps = timePickerRangeTriggerProps\n"],"mappings":";;;;;;;;;;;;AAmCA,MAAa,yBAAyBA,6BAAW;CAI/C,mBAAmB;EACjB,MAAM;EACN,SAAS;EACV;CAID,IAAI,EACF,MAAMC,iCAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,MAAM,EACJ,MAAMA,iCAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,aAAaC,uCAAuB;CAIpC,aAAaA,uCAAuB;CAIpC,QAAQ;CAIR,aAAa;CAIb,YAAY;CAIZ,YAAY;CAIZ,MAAM;EACJ,MAAM;EACN,SAAS;EACV;CAID,WAAW;EACT,MAAM;EACN,SAAS;EACV;CAID,WAAW;EACT,MAAMD,iCAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAASE;EACV;CAID,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAMF,iCAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAAS;EACV;CAID,MAAMG;CAIN,UAAU;CAIV,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,aAAa;EACX,MAAM;EACN,SAAS;EACV;CAID,eAAe;EACb,MAAMH,iCAAiC,OAAO;EAC9C,gBAAgB,EAAE;EACnB;CAID,YAAY;EACV,MAAMA,iCAAsC;GAAC;GAAM;GAAO;GAAQ;GAAO,CAAC;EAC1E,SAAS;EACV;CAID,gBAAgB;EACd,MAAM;EACN,SAAS;EACV;CAID,kBAAkB;CAIlB,gBAAgB;CAIhB,cAAc,EACZ,MAAMA,iCAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,aAAa,EACX,MAAMA,iCAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,SAAS;CACT,GAAGI;CAIH,cAAc,EACZ,MAAM,UACP;CAID,eAAe,EACb,MAAM,UACP;CAID,WAAW;EACT,MAAM;EACN,eAAe,EAAE;EAClB;CAID,cAAc;CAId,UAAU;EACR,MAAMJ,iCAAgC,CAAC,QAAQ,OAAO,CAAC;EACvD,SAAS;EACV;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CAID,cAAc;CAId,WAAW;EACT,MAAMA,iCAA0B,OAAO;EACvC,QAAQK;EACR,SAAS;EACV;CAID,oBAAoB;EAClB,MAAML,iCAA4B,MAAM;EACxC,SAAS;GAAC;GAAU;GAAO;GAAS;GAAO;EAC5C;CACD,GAAGM;CACH,GAAGC,6BAAa,CAAC,YAAY,CAAC;CAI9B,SAAS;EACP,MAAM;EACN,SAAS;EACV;CAID,aAAa;EACX,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAM;EACN,SAAS;EACV;CAID,gBAAgB;CACjB,CAAU;AAoBX,MAAa,8BAA8BR,6BAAW;CACpD,IAAI,EACF,MAAMC,iCAAyB,MAAM,EACtC;CACD,MAAM,EACJ,MAAMA,iCAAyB,MAAM,EACtC;CACD,YAAY,EACV,MAAMA,iCAA0B,CAAC,OAAO,OAAO,CAAC,EACjD;CACD,kBAAkB;CAClB,gBAAgB;CAChB,UAAU;CACX,CAAU;;;;AAKX,MAAa,6BAA6B"}
1
+ {"version":3,"file":"props.js","names":["buildProps","definePropType","useTooltipContentProps","CircleClose","useSizeProp","disabledTimeListsProps","placements","useEmptyValuesProps","useAriaProps"],"sources":["../../../../../../../packages/components/time-picker/src/common/props.ts"],"sourcesContent":["import { placements } from '@popperjs/core'\nimport { buildProps, definePropType } from '@element-plus/utils'\nimport {\n useAriaProps,\n useEmptyValuesProps,\n useSizeProp,\n} from '@element-plus/hooks'\nimport { useTooltipContentProps } from '@element-plus/components/tooltip'\nimport { CircleClose } from '@element-plus/icons-vue'\nimport { disabledTimeListsProps } from '../props/shared'\n\nimport type { Component, ExtractPropTypes, ExtractPublicPropTypes } from 'vue'\nimport type { Options } from '@popperjs/core'\nimport type { Dayjs } from 'dayjs'\nimport type { Placement } from '@element-plus/components/popper'\n\nexport type SingleOrRange<T> = T | [T, T]\nexport type DateModelType = number | string | Date\nexport type ModelValueType = DateModelType | number[] | string[] | Date[]\nexport type DayOrDays = SingleOrRange<Dayjs>\nexport type DateOrDates = SingleOrRange<Date>\nexport type UserInput = SingleOrRange<string | null>\nexport type GetDisabledHours = (role: string, comparingDate?: Dayjs) => number[]\nexport type GetDisabledMinutes = (\n hour: number,\n role: string,\n comparingDate?: Dayjs\n) => number[]\nexport type GetDisabledSeconds = (\n hour: number,\n minute: number,\n role: string,\n comparingDate?: Dayjs\n) => number[]\n\nexport const timePickerDefaultProps = buildProps({\n /**\n * @description this prop decides if the date picker panel pops up when the input is focused\n */\n automaticDropdown: {\n type: Boolean,\n default: true,\n },\n /**\n * @description same as `id` in native input\n */\n id: {\n type: definePropType<SingleOrRange<string>>([Array, String]),\n },\n /**\n * @description same as `name` in native input\n */\n name: {\n type: definePropType<SingleOrRange<string>>([Array, String]),\n },\n /**\n * @description custom class name for TimePicker's dropdown\n */\n popperClass: useTooltipContentProps.popperClass,\n /**\n * @description custom style for TimePicker's dropdown\n */\n popperStyle: useTooltipContentProps.popperStyle,\n /**\n * @description format of the displayed value in the input box\n */\n format: String,\n /**\n * @description optional, format of binding value. If not specified, the binding value will be a Date object\n */\n valueFormat: String,\n /**\n * @description optional, format of the date displayed in input's inner panel\n */\n dateFormat: String,\n /**\n * @description optional, format of the time displayed in input's inner panel\n */\n timeFormat: String,\n /**\n * @description type of the picker\n */\n type: {\n type: String,\n default: '',\n },\n /**\n * @description whether to show clear button\n */\n clearable: {\n type: Boolean,\n default: true,\n },\n /**\n * @description Custom clear icon component\n */\n clearIcon: {\n type: definePropType<string | Component>([String, Object]),\n default: CircleClose,\n },\n /**\n * @description whether the input is editable\n */\n editable: {\n type: Boolean,\n default: true,\n },\n /**\n * @description Whether to auto-fill the input with the current time on focus when no value is selected.\n */\n saveOnBlur: {\n type: Boolean,\n default: true,\n },\n /**\n * @description Custom prefix icon component\n */\n prefixIcon: {\n type: definePropType<string | Component>([String, Object]),\n default: '',\n },\n /**\n * @description size of Input\n */\n size: useSizeProp,\n /**\n * @description whether TimePicker is read only\n */\n readonly: Boolean,\n /**\n * @description whether TimePicker is disabled\n */\n disabled: {\n type: Boolean,\n default: undefined,\n },\n /**\n * @description placeholder in non-range mode\n */\n placeholder: {\n type: String,\n default: '',\n },\n /**\n * @description [popper.js](https://popper.js.org/docs/v2/) parameters\n */\n popperOptions: {\n type: definePropType<Partial<Options>>(Object),\n default: () => ({}),\n },\n /**\n * @description binding value, if it is an array, the length should be 2\n */\n modelValue: {\n type: definePropType<ModelValueType | null>([Date, Array, String, Number]),\n default: '',\n },\n /**\n * @description range separator\n */\n rangeSeparator: {\n type: String,\n default: '-',\n },\n /**\n * @description placeholder for the start date in range mode\n */\n startPlaceholder: String,\n /**\n * @description placeholder for the end date in range mode\n */\n endPlaceholder: String,\n /**\n * @description optional, default date of the calendar\n */\n defaultValue: {\n type: definePropType<SingleOrRange<Date>>([Date, Array]),\n },\n /**\n * @description optional, the time value to use when selecting date range\n */\n defaultTime: {\n type: definePropType<SingleOrRange<Date>>([Date, Array]),\n },\n /**\n * @description whether to pick a time range\n */\n isRange: Boolean,\n ...disabledTimeListsProps,\n /**\n * @description a function determining if a date is disabled with that date as its parameter. Should return a Boolean\n */\n disabledDate: {\n type: Function,\n },\n /**\n * @description set custom className\n */\n cellClassName: {\n type: Function,\n },\n /**\n * @description an object array to set shortcut options\n */\n shortcuts: {\n type: Array,\n default: () => [],\n },\n /**\n * @description whether to pick time using arrow buttons\n */\n arrowControl: Boolean,\n /**\n * @description input tabindex\n */\n tabindex: {\n type: definePropType<string | number>([String, Number]),\n default: 0,\n },\n /**\n * @description whether to trigger form validation\n */\n validateEvent: {\n type: Boolean,\n default: true,\n },\n /**\n * @description unlink two date-panels in range-picker\n */\n unlinkPanels: Boolean,\n /**\n * @description position of dropdown\n */\n placement: {\n type: definePropType<Placement>(String),\n values: placements,\n default: 'bottom',\n },\n /**\n * @description list of possible positions for dropdown\n */\n fallbackPlacements: {\n type: definePropType<Placement[]>(Array),\n default: ['bottom', 'top', 'right', 'left'],\n },\n ...useEmptyValuesProps,\n ...useAriaProps(['ariaLabel']),\n /**\n * @description whether to show the now button\n */\n showNow: {\n type: Boolean,\n default: true,\n },\n /**\n * @description whether to show footer\n */\n showConfirm: {\n type: Boolean,\n default: true,\n },\n /**\n * @description whether to show footer\n */\n showFooter: {\n type: Boolean,\n default: true,\n },\n /**\n * @description whether to show the number of the calendar week\n */\n showWeekNumber: Boolean,\n} as const)\n\nexport type TimePickerDefaultProps = ExtractPropTypes<\n typeof timePickerDefaultProps\n>\nexport type TimePickerDefaultPropsPublic = ExtractPublicPropTypes<\n typeof timePickerDefaultProps\n>\n\nexport interface PickerOptions {\n isValidValue: (date: DayOrDays) => boolean\n handleKeydownInput: (event: KeyboardEvent) => void\n parseUserInput: (value: UserInput) => DayOrDays\n getRangeAvailableTime: (date: DayOrDays) => DayOrDays\n getDefaultValue: () => DayOrDays\n panelReady: boolean\n handleClear: () => void\n handleFocusPicker?: () => void\n handleCancel?: () => void\n}\n\nexport const timePickerRangeTriggerProps = buildProps({\n id: {\n type: definePropType<string[]>(Array),\n },\n name: {\n type: definePropType<string[]>(Array),\n },\n modelValue: {\n type: definePropType<UserInput>([Array, String]),\n },\n startPlaceholder: String,\n endPlaceholder: String,\n disabled: Boolean,\n} as const)\n\n/**\n * @deprecated Use `timePickerRangeTriggerProps` instead. This will be removed in future versions.\n */\nexport const timePickerRngeTriggerProps = timePickerRangeTriggerProps\n"],"mappings":";;;;;;;;;;;;AAmCA,MAAa,yBAAyBA,6BAAW;CAI/C,mBAAmB;EACjB,MAAM;EACN,SAAS;EACV;CAID,IAAI,EACF,MAAMC,iCAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,MAAM,EACJ,MAAMA,iCAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,aAAaC,uCAAuB;CAIpC,aAAaA,uCAAuB;CAIpC,QAAQ;CAIR,aAAa;CAIb,YAAY;CAIZ,YAAY;CAIZ,MAAM;EACJ,MAAM;EACN,SAAS;EACV;CAID,WAAW;EACT,MAAM;EACN,SAAS;EACV;CAID,WAAW;EACT,MAAMD,iCAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAASE;EACV;CAID,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAMF,iCAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAAS;EACV;CAID,MAAMG;CAIN,UAAU;CAIV,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,aAAa;EACX,MAAM;EACN,SAAS;EACV;CAID,eAAe;EACb,MAAMH,iCAAiC,OAAO;EAC9C,gBAAgB,EAAE;EACnB;CAID,YAAY;EACV,MAAMA,iCAAsC;GAAC;GAAM;GAAO;GAAQ;GAAO,CAAC;EAC1E,SAAS;EACV;CAID,gBAAgB;EACd,MAAM;EACN,SAAS;EACV;CAID,kBAAkB;CAIlB,gBAAgB;CAIhB,cAAc,EACZ,MAAMA,iCAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,aAAa,EACX,MAAMA,iCAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,SAAS;CACT,GAAGI;CAIH,cAAc,EACZ,MAAM,UACP;CAID,eAAe,EACb,MAAM,UACP;CAID,WAAW;EACT,MAAM;EACN,eAAe,EAAE;EAClB;CAID,cAAc;CAId,UAAU;EACR,MAAMJ,iCAAgC,CAAC,QAAQ,OAAO,CAAC;EACvD,SAAS;EACV;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CAID,cAAc;CAId,WAAW;EACT,MAAMA,iCAA0B,OAAO;EACvC,QAAQK;EACR,SAAS;EACV;CAID,oBAAoB;EAClB,MAAML,iCAA4B,MAAM;EACxC,SAAS;GAAC;GAAU;GAAO;GAAS;GAAO;EAC5C;CACD,GAAGM;CACH,GAAGC,6BAAa,CAAC,YAAY,CAAC;CAI9B,SAAS;EACP,MAAM;EACN,SAAS;EACV;CAID,aAAa;EACX,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAM;EACN,SAAS;EACV;CAID,gBAAgB;CACjB,CAAU;AAqBX,MAAa,8BAA8BR,6BAAW;CACpD,IAAI,EACF,MAAMC,iCAAyB,MAAM,EACtC;CACD,MAAM,EACJ,MAAMA,iCAAyB,MAAM,EACtC;CACD,YAAY,EACV,MAAMA,iCAA0B,CAAC,OAAO,OAAO,CAAC,EACjD;CACD,kBAAkB;CAClB,gBAAgB;CAChB,UAAU;CACX,CAAU;;;;AAKX,MAAa,6BAA6B"}
@@ -20,6 +20,7 @@ declare const useCommonPicker: <P extends CommonPickerProps, E extends CommonPic
20
20
  panelReady?: boolean | undefined;
21
21
  handleClear?: (() => void) | undefined;
22
22
  handleFocusPicker?: (() => void) | undefined;
23
+ handleCancel?: (() => void) | undefined;
23
24
  }>;
24
25
  pickerVisible: vue.Ref<boolean>;
25
26
  userInput: vue.Ref<UserInput>;
@@ -42,9 +42,15 @@ const buildAvailableTimeSlotGetter = (disabledHours, disabledMinutes, disabledSe
42
42
  getAvailableSeconds
43
43
  };
44
44
  };
45
- const useOldValue = (props) => {
45
+ const useOldValue = (props, options) => {
46
46
  const oldValue = (0, vue.ref)(props.parsedValue);
47
47
  (0, vue.watch)(() => props.visible, (val) => {
48
+ const modelValue = (0, vue.toValue)(options.modelValue);
49
+ const valueOnClear = (0, vue.toValue)(options.valueOnClear);
50
+ if (val && modelValue === valueOnClear) {
51
+ oldValue.value = valueOnClear;
52
+ return;
53
+ }
48
54
  if (!val) oldValue.value = props.parsedValue;
49
55
  });
50
56
  return oldValue;
@@ -1 +1 @@
1
- {"version":3,"file":"use-time-picker.js","names":["makeList"],"sources":["../../../../../../../packages/components/time-picker/src/composables/use-time-picker.ts"],"sourcesContent":["import { ref, watch } from 'vue'\nimport { makeList } from '../utils'\n\nimport type { Dayjs } from 'dayjs'\nimport type {\n GetDisabledHours,\n GetDisabledMinutes,\n GetDisabledSeconds,\n} from '../common/props'\n\nconst makeAvailableArr = (disabledList: boolean[]): number[] => {\n const trueOrNumber = (isDisabled: boolean, index: number) =>\n isDisabled || index\n\n const getNumber = (predicate: number | true): predicate is number =>\n predicate !== true\n\n return disabledList.map(trueOrNumber).filter(getNumber)\n}\n\nexport const getTimeLists = (\n disabledHours?: GetDisabledHours,\n disabledMinutes?: GetDisabledMinutes,\n disabledSeconds?: GetDisabledSeconds\n) => {\n const getHoursList = (role: string, compare?: Dayjs) => {\n return makeList(24, disabledHours && (() => disabledHours?.(role, compare)))\n }\n\n const getMinutesList = (hour: number, role: string, compare?: Dayjs) => {\n return makeList(\n 60,\n disabledMinutes && (() => disabledMinutes?.(hour, role, compare))\n )\n }\n\n const getSecondsList = (\n hour: number,\n minute: number,\n role: string,\n compare?: Dayjs\n ) => {\n return makeList(\n 60,\n disabledSeconds && (() => disabledSeconds?.(hour, minute, role, compare))\n )\n }\n\n return {\n getHoursList,\n getMinutesList,\n getSecondsList,\n }\n}\n\nexport const buildAvailableTimeSlotGetter = (\n disabledHours: GetDisabledHours,\n disabledMinutes: GetDisabledMinutes,\n disabledSeconds: GetDisabledSeconds\n) => {\n const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n disabledHours,\n disabledMinutes,\n disabledSeconds\n )\n\n const getAvailableHours: GetDisabledHours = (role, compare?) => {\n return makeAvailableArr(getHoursList(role, compare))\n }\n\n const getAvailableMinutes: GetDisabledMinutes = (hour, role, compare?) => {\n return makeAvailableArr(getMinutesList(hour, role, compare))\n }\n\n const getAvailableSeconds: GetDisabledSeconds = (\n hour,\n minute,\n role,\n compare?\n ) => {\n return makeAvailableArr(getSecondsList(hour, minute, role, compare))\n }\n\n return {\n getAvailableHours,\n getAvailableMinutes,\n getAvailableSeconds,\n }\n}\n\nexport const useOldValue = (props: {\n parsedValue?: string | Dayjs | Dayjs[]\n visible: boolean\n}) => {\n const oldValue = ref(props.parsedValue)\n\n watch(\n () => props.visible,\n (val) => {\n if (!val) {\n oldValue.value = props.parsedValue\n }\n }\n )\n\n return oldValue\n}\n"],"mappings":";;;;;;AAUA,MAAM,oBAAoB,iBAAsC;CAC9D,MAAM,gBAAgB,YAAqB,UACzC,cAAc;CAEhB,MAAM,aAAa,cACjB,cAAc;AAEhB,QAAO,aAAa,IAAI,aAAa,CAAC,OAAO,UAAU;;AAGzD,MAAa,gBACX,eACA,iBACA,oBACG;CACH,MAAM,gBAAgB,MAAc,YAAoB;AACtD,SAAOA,uBAAS,IAAI,wBAAwB,gBAAgB,MAAM,QAAQ,EAAE;;CAG9E,MAAM,kBAAkB,MAAc,MAAc,YAAoB;AACtE,SAAOA,uBACL,IACA,0BAA0B,kBAAkB,MAAM,MAAM,QAAQ,EACjE;;CAGH,MAAM,kBACJ,MACA,QACA,MACA,YACG;AACH,SAAOA,uBACL,IACA,0BAA0B,kBAAkB,MAAM,QAAQ,MAAM,QAAQ,EACzE;;AAGH,QAAO;EACL;EACA;EACA;EACD;;AAGH,MAAa,gCACX,eACA,iBACA,oBACG;CACH,MAAM,EAAE,cAAc,gBAAgB,mBAAmB,aACvD,eACA,iBACA,gBACD;CAED,MAAM,qBAAuC,MAAM,YAAa;AAC9D,SAAO,iBAAiB,aAAa,MAAM,QAAQ,CAAC;;CAGtD,MAAM,uBAA2C,MAAM,MAAM,YAAa;AACxE,SAAO,iBAAiB,eAAe,MAAM,MAAM,QAAQ,CAAC;;CAG9D,MAAM,uBACJ,MACA,QACA,MACA,YACG;AACH,SAAO,iBAAiB,eAAe,MAAM,QAAQ,MAAM,QAAQ,CAAC;;AAGtE,QAAO;EACL;EACA;EACA;EACD;;AAGH,MAAa,eAAe,UAGtB;CACJ,MAAM,wBAAe,MAAM,YAAY;AAEvC,sBACQ,MAAM,UACX,QAAQ;AACP,MAAI,CAAC,IACH,UAAS,QAAQ,MAAM;GAG5B;AAED,QAAO"}
1
+ {"version":3,"file":"use-time-picker.js","names":["makeList"],"sources":["../../../../../../../packages/components/time-picker/src/composables/use-time-picker.ts"],"sourcesContent":["import { ref, toValue, watch } from 'vue'\nimport { makeList } from '../utils'\n\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type {\n GetDisabledHours,\n GetDisabledMinutes,\n GetDisabledSeconds,\n} from '../common/props'\n\nconst makeAvailableArr = (disabledList: boolean[]): number[] => {\n const trueOrNumber = (isDisabled: boolean, index: number) =>\n isDisabled || index\n\n const getNumber = (predicate: number | true): predicate is number =>\n predicate !== true\n\n return disabledList.map(trueOrNumber).filter(getNumber)\n}\n\nexport const getTimeLists = (\n disabledHours?: GetDisabledHours,\n disabledMinutes?: GetDisabledMinutes,\n disabledSeconds?: GetDisabledSeconds\n) => {\n const getHoursList = (role: string, compare?: Dayjs) => {\n return makeList(24, disabledHours && (() => disabledHours?.(role, compare)))\n }\n\n const getMinutesList = (hour: number, role: string, compare?: Dayjs) => {\n return makeList(\n 60,\n disabledMinutes && (() => disabledMinutes?.(hour, role, compare))\n )\n }\n\n const getSecondsList = (\n hour: number,\n minute: number,\n role: string,\n compare?: Dayjs\n ) => {\n return makeList(\n 60,\n disabledSeconds && (() => disabledSeconds?.(hour, minute, role, compare))\n )\n }\n\n return {\n getHoursList,\n getMinutesList,\n getSecondsList,\n }\n}\n\nexport const buildAvailableTimeSlotGetter = (\n disabledHours: GetDisabledHours,\n disabledMinutes: GetDisabledMinutes,\n disabledSeconds: GetDisabledSeconds\n) => {\n const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n disabledHours,\n disabledMinutes,\n disabledSeconds\n )\n\n const getAvailableHours: GetDisabledHours = (role, compare?) => {\n return makeAvailableArr(getHoursList(role, compare))\n }\n\n const getAvailableMinutes: GetDisabledMinutes = (hour, role, compare?) => {\n return makeAvailableArr(getMinutesList(hour, role, compare))\n }\n\n const getAvailableSeconds: GetDisabledSeconds = (\n hour,\n minute,\n role,\n compare?\n ) => {\n return makeAvailableArr(getSecondsList(hour, minute, role, compare))\n }\n\n return {\n getAvailableHours,\n getAvailableMinutes,\n getAvailableSeconds,\n }\n}\n\nexport const useOldValue = (\n props: {\n parsedValue?: string | Dayjs | Dayjs[]\n visible: boolean\n },\n options: {\n modelValue: MaybeRefOrGetter<unknown>\n valueOnClear: MaybeRefOrGetter<unknown>\n }\n) => {\n const oldValue = ref(props.parsedValue)\n\n watch(\n () => props.visible,\n (val) => {\n const modelValue = toValue(options.modelValue)\n const valueOnClear = toValue(options.valueOnClear)\n if (val && modelValue === valueOnClear) {\n oldValue.value = valueOnClear as typeof oldValue.value\n return\n }\n if (!val) {\n oldValue.value = props.parsedValue\n }\n }\n )\n\n return oldValue\n}\n"],"mappings":";;;;;;AAWA,MAAM,oBAAoB,iBAAsC;CAC9D,MAAM,gBAAgB,YAAqB,UACzC,cAAc;CAEhB,MAAM,aAAa,cACjB,cAAc;AAEhB,QAAO,aAAa,IAAI,aAAa,CAAC,OAAO,UAAU;;AAGzD,MAAa,gBACX,eACA,iBACA,oBACG;CACH,MAAM,gBAAgB,MAAc,YAAoB;AACtD,SAAOA,uBAAS,IAAI,wBAAwB,gBAAgB,MAAM,QAAQ,EAAE;;CAG9E,MAAM,kBAAkB,MAAc,MAAc,YAAoB;AACtE,SAAOA,uBACL,IACA,0BAA0B,kBAAkB,MAAM,MAAM,QAAQ,EACjE;;CAGH,MAAM,kBACJ,MACA,QACA,MACA,YACG;AACH,SAAOA,uBACL,IACA,0BAA0B,kBAAkB,MAAM,QAAQ,MAAM,QAAQ,EACzE;;AAGH,QAAO;EACL;EACA;EACA;EACD;;AAGH,MAAa,gCACX,eACA,iBACA,oBACG;CACH,MAAM,EAAE,cAAc,gBAAgB,mBAAmB,aACvD,eACA,iBACA,gBACD;CAED,MAAM,qBAAuC,MAAM,YAAa;AAC9D,SAAO,iBAAiB,aAAa,MAAM,QAAQ,CAAC;;CAGtD,MAAM,uBAA2C,MAAM,MAAM,YAAa;AACxE,SAAO,iBAAiB,eAAe,MAAM,MAAM,QAAQ,CAAC;;CAG9D,MAAM,uBACJ,MACA,QACA,MACA,YACG;AACH,SAAO,iBAAiB,eAAe,MAAM,QAAQ,MAAM,QAAQ,CAAC;;AAGtE,QAAO;EACL;EACA;EACA;EACD;;AAGH,MAAa,eACX,OAIA,YAIG;CACH,MAAM,wBAAe,MAAM,YAAY;AAEvC,sBACQ,MAAM,UACX,QAAQ;EACP,MAAM,8BAAqB,QAAQ,WAAW;EAC9C,MAAM,gCAAuB,QAAQ,aAAa;AAClD,MAAI,OAAO,eAAe,cAAc;AACtC,YAAS,QAAQ;AACjB;;AAEF,MAAI,CAAC,IACH,UAAS,QAAQ,MAAM;GAG5B;AAED,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"basic-time-spinner.js","names":[],"sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue"],"sourcesContent":["<template>\n <div :class=\"[ns.b('spinner'), { 'has-seconds': showSeconds }]\">\n <template v-if=\"!arrowControl\">\n <el-scrollbar\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :ref=\"(scrollbar: unknown) => setRef(scrollbar as any, item)\"\n :class=\"ns.be('spinner', 'wrapper')\"\n wrap-style=\"max-height: inherit;\"\n :view-class=\"ns.be('spinner', 'list')\"\n noresize\n tag=\"ul\"\n @mouseenter=\"emitSelectRange(item)\"\n @mousemove=\"adjustCurrentSpinner(item)\"\n >\n <li\n v-for=\"(disabled, key) in timeList[item]\"\n :key=\"key\"\n :class=\"[\n ns.be('spinner', 'item'),\n ns.is('active', key === timePartials[item]),\n ns.is('disabled', disabled),\n ]\"\n @click=\"handleClick(item, { value: key, disabled })\"\n >\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n }}{{ getAmPmFlag(key) }}\n </template>\n <template v-else>\n {{ ('0' + key).slice(-2) }}\n </template>\n </li>\n </el-scrollbar>\n </template>\n <template v-if=\"arrowControl\">\n <div\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :class=\"[ns.be('spinner', 'wrapper'), ns.is('arrow')]\"\n @mouseenter=\"emitSelectRange(item)\"\n >\n <el-icon\n v-repeat-click=\"onDecrement\"\n :class=\"['arrow-up', ns.be('spinner', 'arrow')]\"\n >\n <arrow-up />\n </el-icon>\n <el-icon\n v-repeat-click=\"onIncrement\"\n :class=\"['arrow-down', ns.be('spinner', 'arrow')]\"\n >\n <arrow-down />\n </el-icon>\n <ul :class=\"ns.be('spinner', 'list')\">\n <li\n v-for=\"(time, key) in arrowControlTimeList[item]\"\n :key=\"key\"\n :class=\"[\n ns.be('spinner', 'item'),\n ns.is('active', time === timePartials[item]),\n ns.is('disabled', timeList[item][time!]),\n ]\"\n >\n <template v-if=\"isNumber(time)\">\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2)\n }}{{ getAmPmFlag(time) }}\n </template>\n <template v-else>\n {{ ('0' + time).slice(-2) }}\n </template>\n </template>\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, onMounted, ref, unref, watch } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { vRepeatClick } from '@element-plus/directives'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { getStyle, isNumber } from '@element-plus/utils'\nimport { CHANGE_EVENT } from '@element-plus/constants'\nimport {\n DEFAULT_FORMATS_TIME,\n PICKER_BASE_INJECTION_KEY,\n timeUnits,\n} from '../constants'\nimport { buildTimeList } from '../utils'\nimport { basicTimeSpinnerProps } from '../props/basic-time-spinner'\nimport { getTimeLists } from '../composables/use-time-picker'\n\nimport type { Ref } from 'vue'\nimport type { ScrollbarInstance } from '@element-plus/components/scrollbar'\nimport type { TimeUnit } from '../constants'\nimport type { TimeList } from '../utils'\n\nconst props = defineProps(basicTimeSpinnerProps)\nconst pickerBase = inject(PICKER_BASE_INJECTION_KEY) as any\nconst { isRange, format } = pickerBase.props\nconst emit = defineEmits([CHANGE_EVENT, 'select-range', 'set-option'])\n\nconst ns = useNamespace('time')\n\nconst { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n props.disabledHours,\n props.disabledMinutes,\n props.disabledSeconds\n)\n\n// data\nlet isScrolling = false\n\nconst currentScrollbar = ref<TimeUnit>()\nconst listHoursRef = ref<ScrollbarInstance>()\nconst listMinutesRef = ref<ScrollbarInstance>()\nconst listSecondsRef = ref<ScrollbarInstance>()\nconst listRefsMap: Record<TimeUnit, Ref<ScrollbarInstance | undefined>> = {\n hours: listHoursRef,\n minutes: listMinutesRef,\n seconds: listSecondsRef,\n}\n\n// computed\nconst spinnerItems = computed(() => {\n return props.showSeconds ? timeUnits : timeUnits.slice(0, 2)\n})\n\nconst timePartials = computed<Record<TimeUnit, number>>(() => {\n const { spinnerDate } = props\n const hours = spinnerDate.hour()\n const minutes = spinnerDate.minute()\n const seconds = spinnerDate.second()\n return { hours, minutes, seconds }\n})\n\nconst timeList = computed(() => {\n const { hours, minutes } = unref(timePartials)\n const { role, spinnerDate } = props\n const compare = !isRange ? spinnerDate : undefined\n return {\n hours: getHoursList(role, compare),\n minutes: getMinutesList(hours, role, compare),\n seconds: getSecondsList(hours, minutes, role, compare),\n }\n})\n\nconst arrowControlTimeList = computed<Record<TimeUnit, TimeList>>(() => {\n const { hours, minutes, seconds } = unref(timePartials)\n\n return {\n hours: buildTimeList(hours, 23),\n minutes: buildTimeList(minutes, 59),\n seconds: buildTimeList(seconds, 59),\n }\n})\n\nconst debouncedResetScroll = debounce((type) => {\n isScrolling = false\n adjustCurrentSpinner(type)\n}, 200)\n\nconst getAmPmFlag = (hour: number) => {\n const shouldShowAmPm = !!props.amPmMode\n if (!shouldShowAmPm) return ''\n const isCapital = props.amPmMode === 'A'\n // todo locale\n let content = hour < 12 ? ' am' : ' pm'\n if (isCapital) content = content.toUpperCase()\n return content\n}\n\nconst emitSelectRange = (type: TimeUnit) => {\n let range = [0, 0]\n const actualFormat = format || DEFAULT_FORMATS_TIME\n const hourIndex = actualFormat.indexOf('HH')\n const minuteIndex = actualFormat.indexOf('mm')\n const secondIndex = actualFormat.indexOf('ss')\n switch (type) {\n case 'hours':\n if (hourIndex !== -1) {\n range = [hourIndex, hourIndex + 2]\n }\n break\n case 'minutes':\n if (minuteIndex !== -1) {\n range = [minuteIndex, minuteIndex + 2]\n }\n break\n case 'seconds':\n if (secondIndex !== -1) {\n range = [secondIndex, secondIndex + 2]\n }\n break\n }\n const [left, right] = range\n\n emit('select-range', left, right)\n currentScrollbar.value = type\n}\n\nconst adjustCurrentSpinner = (type: TimeUnit) => {\n adjustSpinner(type, unref(timePartials)[type])\n}\n\nconst adjustSpinners = () => {\n adjustCurrentSpinner('hours')\n adjustCurrentSpinner('minutes')\n adjustCurrentSpinner('seconds')\n}\n\nconst getScrollbarElement = (el: HTMLElement) =>\n el.querySelector(`.${ns.namespace.value}-scrollbar__wrap`) as HTMLElement\n\nconst adjustSpinner = (type: TimeUnit, value: number) => {\n if (props.arrowControl) return\n const scrollbar = unref(listRefsMap[type])\n if (scrollbar && scrollbar.$el) {\n getScrollbarElement(scrollbar.$el).scrollTop = Math.max(\n 0,\n value * typeItemHeight(type)\n )\n }\n}\n\nconst typeItemHeight = (type: TimeUnit): number => {\n const scrollbar = unref(listRefsMap[type])\n const listItem = scrollbar?.$el.querySelector('li')\n if (listItem) {\n return Number.parseFloat(getStyle(listItem, 'height')) || 0\n }\n return 0\n}\n\nconst onIncrement = () => {\n scrollDown(1)\n}\n\nconst onDecrement = () => {\n scrollDown(-1)\n}\n\nconst scrollDown = (step: number) => {\n if (!currentScrollbar.value) {\n emitSelectRange('hours')\n }\n\n const label = currentScrollbar.value!\n const now = unref(timePartials)[label]\n const total = currentScrollbar.value === 'hours' ? 24 : 60\n const next = findNextUnDisabled(label, now, step, total)\n\n modifyDateField(label, next)\n adjustSpinner(label, next)\n nextTick(() => emitSelectRange(label))\n}\n\nconst findNextUnDisabled = (\n type: TimeUnit,\n now: number,\n step: number,\n total: number\n) => {\n let next = (now + step + total) % total\n const list = unref(timeList)[type]\n while (list[next] && next !== now) {\n next = (next + step + total) % total\n }\n return next\n}\n\nconst modifyDateField = (type: TimeUnit, value: number) => {\n const list = unref(timeList)[type]\n const isDisabled = list[value]\n if (isDisabled) return\n\n const { hours, minutes, seconds } = unref(timePartials)\n\n let changeTo\n switch (type) {\n case 'hours':\n changeTo = props.spinnerDate.hour(value).minute(minutes).second(seconds)\n break\n case 'minutes':\n changeTo = props.spinnerDate.hour(hours).minute(value).second(seconds)\n break\n case 'seconds':\n changeTo = props.spinnerDate.hour(hours).minute(minutes).second(value)\n break\n }\n emit(CHANGE_EVENT, changeTo)\n}\n\nconst handleClick = (\n type: TimeUnit,\n { value, disabled }: { value: number; disabled: boolean }\n) => {\n if (!disabled) {\n modifyDateField(type, value)\n emitSelectRange(type)\n adjustSpinner(type, value)\n }\n}\n\nconst handleScroll = (type: TimeUnit) => {\n const scrollbar = unref(listRefsMap[type])\n if (!scrollbar) return\n\n isScrolling = true\n debouncedResetScroll(type)\n const value = Math.min(\n Math.round(\n (getScrollbarElement(scrollbar.$el).scrollTop -\n (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n 3) /\n typeItemHeight(type)\n ),\n type === 'hours' ? 23 : 59\n )\n modifyDateField(type, value)\n}\n\nconst scrollBarHeight = (type: TimeUnit) => {\n return unref(listRefsMap[type])!.$el.offsetHeight\n}\n\nconst bindScrollEvent = () => {\n const bindFunction = (type: TimeUnit) => {\n const scrollbar = unref(listRefsMap[type])\n if (scrollbar && scrollbar.$el) {\n getScrollbarElement(scrollbar.$el).onscroll = () => {\n // TODO: scroll is emitted when set scrollTop programmatically\n // should find better solutions in the future!\n handleScroll(type)\n }\n }\n }\n bindFunction('hours')\n bindFunction('minutes')\n bindFunction('seconds')\n}\n\nonMounted(() => {\n nextTick(() => {\n !props.arrowControl && bindScrollEvent()\n adjustSpinners()\n // set selection on the first hour part\n if (props.role === 'start') emitSelectRange('hours')\n })\n})\n\nconst setRef = (scrollbar: ScrollbarInstance | null, type: TimeUnit) => {\n listRefsMap[type].value = scrollbar ?? undefined\n}\n\nemit('set-option', [`${props.role}_scrollDown`, scrollDown])\nemit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\nwatch(\n () => props.spinnerDate,\n () => {\n if (isScrolling) return\n adjustSpinners()\n }\n)\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"basic-time-spinner.js","names":[],"sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue"],"sourcesContent":["<template>\n <div :class=\"[ns.b('spinner'), { 'has-seconds': showSeconds }]\">\n <template v-if=\"!arrowControl\">\n <el-scrollbar\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :ref=\"(scrollbar: unknown) => setRef(scrollbar as any, item)\"\n :class=\"ns.be('spinner', 'wrapper')\"\n wrap-style=\"max-height: inherit;\"\n :view-class=\"ns.be('spinner', 'list')\"\n noresize\n tag=\"ul\"\n @mouseenter=\"emitSelectRange(item)\"\n @mousemove=\"adjustCurrentSpinner(item)\"\n >\n <li\n v-for=\"(disabled, key) in timeList[item]\"\n :key=\"key\"\n :class=\"[\n ns.be('spinner', 'item'),\n ns.is('active', key === timePartials[item]),\n ns.is('disabled', disabled),\n ]\"\n @click=\"handleClick(item, { value: key, disabled })\"\n >\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n }}{{ getAmPmFlag(key) }}\n </template>\n <template v-else>\n {{ ('0' + key).slice(-2) }}\n </template>\n </li>\n </el-scrollbar>\n </template>\n <template v-if=\"arrowControl\">\n <div\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :class=\"[ns.be('spinner', 'wrapper'), ns.is('arrow')]\"\n @mouseenter=\"emitSelectRange(item)\"\n >\n <el-icon\n v-repeat-click=\"onDecrement\"\n :class=\"['arrow-up', ns.be('spinner', 'arrow')]\"\n >\n <arrow-up />\n </el-icon>\n <el-icon\n v-repeat-click=\"onIncrement\"\n :class=\"['arrow-down', ns.be('spinner', 'arrow')]\"\n >\n <arrow-down />\n </el-icon>\n <ul :class=\"ns.be('spinner', 'list')\">\n <li\n v-for=\"(time, key) in arrowControlTimeList[item]\"\n :key=\"key\"\n :class=\"[\n ns.be('spinner', 'item'),\n ns.is('active', time === timePartials[item]),\n ns.is('disabled', timeList[item][time!]),\n ]\"\n >\n <template v-if=\"isNumber(time)\">\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2)\n }}{{ getAmPmFlag(time) }}\n </template>\n <template v-else>\n {{ ('0' + time).slice(-2) }}\n </template>\n </template>\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, onMounted, ref, unref, watch } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { vRepeatClick } from '@element-plus/directives'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { getStyle, isNumber, rAF } from '@element-plus/utils'\nimport { CHANGE_EVENT } from '@element-plus/constants'\nimport {\n DEFAULT_FORMATS_TIME,\n PICKER_BASE_INJECTION_KEY,\n timeUnits,\n} from '../constants'\nimport { buildTimeList } from '../utils'\nimport { basicTimeSpinnerProps } from '../props/basic-time-spinner'\nimport { getTimeLists } from '../composables/use-time-picker'\n\nimport type { Ref } from 'vue'\nimport type { ScrollbarInstance } from '@element-plus/components/scrollbar'\nimport type { TimeUnit } from '../constants'\nimport type { TimeList } from '../utils'\n\nconst props = defineProps(basicTimeSpinnerProps)\nconst pickerBase = inject(PICKER_BASE_INJECTION_KEY) as any\nconst { isRange, format, saveOnBlur } = pickerBase.props\nconst emit = defineEmits([CHANGE_EVENT, 'select-range', 'set-option'])\n\nconst ns = useNamespace('time')\n\nconst { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n props.disabledHours,\n props.disabledMinutes,\n props.disabledSeconds\n)\n\n// data\nlet isScrolling = false\nconst ignoreScroll = {\n hours: false,\n minutes: false,\n seconds: false,\n}\n\nconst currentScrollbar = ref<TimeUnit>()\nconst listHoursRef = ref<ScrollbarInstance>()\nconst listMinutesRef = ref<ScrollbarInstance>()\nconst listSecondsRef = ref<ScrollbarInstance>()\nconst listRefsMap: Record<TimeUnit, Ref<ScrollbarInstance | undefined>> = {\n hours: listHoursRef,\n minutes: listMinutesRef,\n seconds: listSecondsRef,\n}\n\n// computed\nconst spinnerItems = computed(() => {\n return props.showSeconds ? timeUnits : timeUnits.slice(0, 2)\n})\n\nconst timePartials = computed<Record<TimeUnit, number>>(() => {\n const { spinnerDate } = props\n const hours = spinnerDate.hour()\n const minutes = spinnerDate.minute()\n const seconds = spinnerDate.second()\n return { hours, minutes, seconds }\n})\n\nconst timeList = computed(() => {\n const { hours, minutes } = unref(timePartials)\n const { role, spinnerDate } = props\n const compare = !isRange ? spinnerDate : undefined\n return {\n hours: getHoursList(role, compare),\n minutes: getMinutesList(hours, role, compare),\n seconds: getSecondsList(hours, minutes, role, compare),\n }\n})\n\nconst arrowControlTimeList = computed<Record<TimeUnit, TimeList>>(() => {\n const { hours, minutes, seconds } = unref(timePartials)\n\n return {\n hours: buildTimeList(hours, 23),\n minutes: buildTimeList(minutes, 59),\n seconds: buildTimeList(seconds, 59),\n }\n})\n\nconst debouncedResetScroll = debounce((type) => {\n isScrolling = false\n adjustCurrentSpinner(type)\n}, 200)\n\nconst getAmPmFlag = (hour: number) => {\n const shouldShowAmPm = !!props.amPmMode\n if (!shouldShowAmPm) return ''\n const isCapital = props.amPmMode === 'A'\n // todo locale\n let content = hour < 12 ? ' am' : ' pm'\n if (isCapital) content = content.toUpperCase()\n return content\n}\n\nconst emitSelectRange = (type: TimeUnit) => {\n let range = [0, 0]\n const actualFormat = format || DEFAULT_FORMATS_TIME\n const hourIndex = actualFormat.indexOf('HH')\n const minuteIndex = actualFormat.indexOf('mm')\n const secondIndex = actualFormat.indexOf('ss')\n switch (type) {\n case 'hours':\n if (hourIndex !== -1) {\n range = [hourIndex, hourIndex + 2]\n }\n break\n case 'minutes':\n if (minuteIndex !== -1) {\n range = [minuteIndex, minuteIndex + 2]\n }\n break\n case 'seconds':\n if (secondIndex !== -1) {\n range = [secondIndex, secondIndex + 2]\n }\n break\n }\n const [left, right] = range\n\n emit('select-range', left, right)\n currentScrollbar.value = type\n}\n\nconst adjustCurrentSpinner = (type: TimeUnit) => {\n adjustSpinner(type, unref(timePartials)[type])\n}\n\nconst adjustSpinners = () => {\n adjustCurrentSpinner('hours')\n adjustCurrentSpinner('minutes')\n adjustCurrentSpinner('seconds')\n}\n\nconst getScrollbarElement = (el: HTMLElement) =>\n el.querySelector(`.${ns.namespace.value}-scrollbar__wrap`) as HTMLElement\n\nconst adjustSpinner = (type: TimeUnit, value: number) => {\n if (props.arrowControl) return\n const scrollbar = unref(listRefsMap[type])\n if (scrollbar && scrollbar.$el) {\n if (!saveOnBlur) {\n ignoreScroll[type] = true\n rAF(() => {\n ignoreScroll[type] = false\n })\n }\n getScrollbarElement(scrollbar.$el).scrollTop = Math.max(\n 0,\n value * typeItemHeight(type)\n )\n }\n}\n\nconst typeItemHeight = (type: TimeUnit): number => {\n const scrollbar = unref(listRefsMap[type])\n const listItem = scrollbar?.$el.querySelector('li')\n if (listItem) {\n return Number.parseFloat(getStyle(listItem, 'height')) || 0\n }\n return 0\n}\n\nconst onIncrement = () => {\n scrollDown(1)\n}\n\nconst onDecrement = () => {\n scrollDown(-1)\n}\n\nconst scrollDown = (step: number) => {\n if (!currentScrollbar.value) {\n emitSelectRange('hours')\n }\n\n const label = currentScrollbar.value!\n const now = unref(timePartials)[label]\n const total = currentScrollbar.value === 'hours' ? 24 : 60\n const next = findNextUnDisabled(label, now, step, total)\n\n modifyDateField(label, next)\n adjustSpinner(label, next)\n nextTick(() => emitSelectRange(label))\n}\n\nconst findNextUnDisabled = (\n type: TimeUnit,\n now: number,\n step: number,\n total: number\n) => {\n let next = (now + step + total) % total\n const list = unref(timeList)[type]\n while (list[next] && next !== now) {\n next = (next + step + total) % total\n }\n return next\n}\n\nconst modifyDateField = (type: TimeUnit, value: number) => {\n const list = unref(timeList)[type]\n const isDisabled = list[value]\n if (isDisabled) return\n\n const { hours, minutes, seconds } = unref(timePartials)\n\n let changeTo\n switch (type) {\n case 'hours':\n changeTo = props.spinnerDate.hour(value).minute(minutes).second(seconds)\n break\n case 'minutes':\n changeTo = props.spinnerDate.hour(hours).minute(value).second(seconds)\n break\n case 'seconds':\n changeTo = props.spinnerDate.hour(hours).minute(minutes).second(value)\n break\n }\n emit(CHANGE_EVENT, changeTo)\n}\n\nconst handleClick = (\n type: TimeUnit,\n { value, disabled }: { value: number; disabled: boolean }\n) => {\n if (!disabled) {\n modifyDateField(type, value)\n emitSelectRange(type)\n adjustSpinner(type, value)\n }\n}\n\nconst handleScroll = (type: TimeUnit) => {\n if (!saveOnBlur && ignoreScroll[type]) return\n const scrollbar = unref(listRefsMap[type])\n if (!scrollbar) return\n\n isScrolling = true\n debouncedResetScroll(type)\n const value = Math.min(\n Math.round(\n (getScrollbarElement(scrollbar.$el).scrollTop -\n (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n 3) /\n typeItemHeight(type)\n ),\n type === 'hours' ? 23 : 59\n )\n modifyDateField(type, value)\n}\n\nconst scrollBarHeight = (type: TimeUnit) => {\n return unref(listRefsMap[type])!.$el.offsetHeight\n}\n\nconst bindScrollEvent = () => {\n const bindFunction = (type: TimeUnit) => {\n const scrollbar = unref(listRefsMap[type])\n if (scrollbar && scrollbar.$el) {\n getScrollbarElement(scrollbar.$el).onscroll = () => {\n // TODO: scroll is emitted when set scrollTop programmatically\n // should find better solutions in the future!\n handleScroll(type)\n }\n }\n }\n bindFunction('hours')\n bindFunction('minutes')\n bindFunction('seconds')\n}\n\nonMounted(() => {\n nextTick(() => {\n !props.arrowControl && bindScrollEvent()\n adjustSpinners()\n // set selection on the first hour part\n if (props.role === 'start') emitSelectRange('hours')\n })\n})\n\nconst setRef = (scrollbar: ScrollbarInstance | null, type: TimeUnit) => {\n listRefsMap[type].value = scrollbar ?? undefined\n}\n\nemit('set-option', [`${props.role}_scrollDown`, scrollDown])\nemit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\nwatch(\n () => props.spinnerDate,\n () => {\n if (isScrolling) return\n adjustSpinners()\n }\n)\n</script>\n"],"mappings":""}