@element-plus/nightly 0.0.20260304 → 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.
- package/attributes.json +1 -1
- package/dist/index.css +1 -1
- package/dist/index.full.js +78 -27
- package/dist/index.full.min.js +8 -8
- package/dist/index.full.min.js.map +1 -1
- package/dist/index.full.min.mjs +8 -8
- package/dist/index.full.min.mjs.map +1 -1
- package/dist/index.full.mjs +79 -28
- package/dist/locale/af.js +1 -1
- package/dist/locale/af.min.js +1 -1
- package/dist/locale/af.min.mjs +1 -1
- package/dist/locale/af.mjs +1 -1
- package/dist/locale/ar-eg.js +1 -1
- package/dist/locale/ar-eg.min.js +1 -1
- package/dist/locale/ar-eg.min.mjs +1 -1
- package/dist/locale/ar-eg.mjs +1 -1
- package/dist/locale/ar.js +1 -1
- package/dist/locale/ar.min.js +1 -1
- package/dist/locale/ar.min.mjs +1 -1
- package/dist/locale/ar.mjs +1 -1
- package/dist/locale/az.js +1 -1
- package/dist/locale/az.min.js +1 -1
- package/dist/locale/az.min.mjs +1 -1
- package/dist/locale/az.mjs +1 -1
- package/dist/locale/bg.js +1 -1
- package/dist/locale/bg.min.js +1 -1
- package/dist/locale/bg.min.mjs +1 -1
- package/dist/locale/bg.mjs +1 -1
- package/dist/locale/bn.js +1 -1
- package/dist/locale/bn.min.js +1 -1
- package/dist/locale/bn.min.mjs +1 -1
- package/dist/locale/bn.mjs +1 -1
- package/dist/locale/ca.js +1 -1
- package/dist/locale/ca.min.js +1 -1
- package/dist/locale/ca.min.mjs +1 -1
- package/dist/locale/ca.mjs +1 -1
- package/dist/locale/ckb.js +1 -1
- package/dist/locale/ckb.min.js +1 -1
- package/dist/locale/ckb.min.mjs +1 -1
- package/dist/locale/ckb.mjs +1 -1
- package/dist/locale/cs.js +1 -1
- package/dist/locale/cs.min.js +1 -1
- package/dist/locale/cs.min.mjs +1 -1
- package/dist/locale/cs.mjs +1 -1
- package/dist/locale/da.js +1 -1
- package/dist/locale/da.min.js +1 -1
- package/dist/locale/da.min.mjs +1 -1
- package/dist/locale/da.mjs +1 -1
- package/dist/locale/de.js +1 -1
- package/dist/locale/de.min.js +1 -1
- package/dist/locale/de.min.mjs +1 -1
- package/dist/locale/de.mjs +1 -1
- package/dist/locale/el.js +1 -1
- package/dist/locale/el.min.js +1 -1
- package/dist/locale/el.min.mjs +1 -1
- package/dist/locale/el.mjs +1 -1
- package/dist/locale/en.js +1 -1
- package/dist/locale/en.min.js +1 -1
- package/dist/locale/en.min.mjs +1 -1
- package/dist/locale/en.mjs +1 -1
- package/dist/locale/eo.js +1 -1
- package/dist/locale/eo.min.js +1 -1
- package/dist/locale/eo.min.mjs +1 -1
- package/dist/locale/eo.mjs +1 -1
- package/dist/locale/es.js +1 -1
- package/dist/locale/es.min.js +1 -1
- package/dist/locale/es.min.mjs +1 -1
- package/dist/locale/es.mjs +1 -1
- package/dist/locale/et.js +1 -1
- package/dist/locale/et.min.js +1 -1
- package/dist/locale/et.min.mjs +1 -1
- package/dist/locale/et.mjs +1 -1
- package/dist/locale/eu.js +1 -1
- package/dist/locale/eu.min.js +1 -1
- package/dist/locale/eu.min.mjs +1 -1
- package/dist/locale/eu.mjs +1 -1
- package/dist/locale/fa.js +1 -1
- package/dist/locale/fa.min.js +1 -1
- package/dist/locale/fa.min.mjs +1 -1
- package/dist/locale/fa.mjs +1 -1
- package/dist/locale/fi.js +1 -1
- package/dist/locale/fi.min.js +1 -1
- package/dist/locale/fi.min.mjs +1 -1
- package/dist/locale/fi.mjs +1 -1
- package/dist/locale/fr.js +1 -1
- package/dist/locale/fr.min.js +1 -1
- package/dist/locale/fr.min.mjs +1 -1
- package/dist/locale/fr.mjs +1 -1
- package/dist/locale/he.js +1 -1
- package/dist/locale/he.min.js +1 -1
- package/dist/locale/he.min.mjs +1 -1
- package/dist/locale/he.mjs +1 -1
- package/dist/locale/hi.js +1 -1
- package/dist/locale/hi.min.js +1 -1
- package/dist/locale/hi.min.mjs +1 -1
- package/dist/locale/hi.mjs +1 -1
- package/dist/locale/hr.js +1 -1
- package/dist/locale/hr.min.js +1 -1
- package/dist/locale/hr.min.mjs +1 -1
- package/dist/locale/hr.mjs +1 -1
- package/dist/locale/hu.js +1 -1
- package/dist/locale/hu.min.js +1 -1
- package/dist/locale/hu.min.mjs +1 -1
- package/dist/locale/hu.mjs +1 -1
- package/dist/locale/hy-am.js +1 -1
- package/dist/locale/hy-am.min.js +1 -1
- package/dist/locale/hy-am.min.mjs +1 -1
- package/dist/locale/hy-am.mjs +1 -1
- package/dist/locale/id.js +1 -1
- package/dist/locale/id.min.js +1 -1
- package/dist/locale/id.min.mjs +1 -1
- package/dist/locale/id.mjs +1 -1
- package/dist/locale/it.js +1 -1
- package/dist/locale/it.min.js +1 -1
- package/dist/locale/it.min.mjs +1 -1
- package/dist/locale/it.mjs +1 -1
- package/dist/locale/ja.js +1 -1
- package/dist/locale/ja.min.js +1 -1
- package/dist/locale/ja.min.mjs +1 -1
- package/dist/locale/ja.mjs +1 -1
- package/dist/locale/kk.js +1 -1
- package/dist/locale/kk.min.js +1 -1
- package/dist/locale/kk.min.mjs +1 -1
- package/dist/locale/kk.mjs +1 -1
- package/dist/locale/km.js +1 -1
- package/dist/locale/km.min.js +1 -1
- package/dist/locale/km.min.mjs +1 -1
- package/dist/locale/km.mjs +1 -1
- package/dist/locale/ko.js +1 -1
- package/dist/locale/ko.min.js +1 -1
- package/dist/locale/ko.min.mjs +1 -1
- package/dist/locale/ko.mjs +1 -1
- package/dist/locale/ku.js +1 -1
- package/dist/locale/ku.min.js +1 -1
- package/dist/locale/ku.min.mjs +1 -1
- package/dist/locale/ku.mjs +1 -1
- package/dist/locale/ky.js +1 -1
- package/dist/locale/ky.min.js +1 -1
- package/dist/locale/ky.min.mjs +1 -1
- package/dist/locale/ky.mjs +1 -1
- package/dist/locale/lo.js +1 -1
- package/dist/locale/lo.min.js +1 -1
- package/dist/locale/lo.min.mjs +1 -1
- package/dist/locale/lo.mjs +1 -1
- package/dist/locale/lt.js +1 -1
- package/dist/locale/lt.min.js +1 -1
- package/dist/locale/lt.min.mjs +1 -1
- package/dist/locale/lt.mjs +1 -1
- package/dist/locale/lv.js +1 -1
- package/dist/locale/lv.min.js +1 -1
- package/dist/locale/lv.min.mjs +1 -1
- package/dist/locale/lv.mjs +1 -1
- package/dist/locale/mg.js +1 -1
- package/dist/locale/mg.min.js +1 -1
- package/dist/locale/mg.min.mjs +1 -1
- package/dist/locale/mg.mjs +1 -1
- package/dist/locale/mn.js +1 -1
- package/dist/locale/mn.min.js +1 -1
- package/dist/locale/mn.min.mjs +1 -1
- package/dist/locale/mn.mjs +1 -1
- package/dist/locale/ms.js +1 -1
- package/dist/locale/ms.min.js +1 -1
- package/dist/locale/ms.min.mjs +1 -1
- package/dist/locale/ms.mjs +1 -1
- package/dist/locale/my.js +1 -1
- package/dist/locale/my.min.js +1 -1
- package/dist/locale/my.min.mjs +1 -1
- package/dist/locale/my.mjs +1 -1
- package/dist/locale/nb-no.js +1 -1
- package/dist/locale/nb-no.min.js +1 -1
- package/dist/locale/nb-no.min.mjs +1 -1
- package/dist/locale/nb-no.mjs +1 -1
- package/dist/locale/nl.js +1 -1
- package/dist/locale/nl.min.js +1 -1
- package/dist/locale/nl.min.mjs +1 -1
- package/dist/locale/nl.mjs +1 -1
- package/dist/locale/no.js +1 -1
- package/dist/locale/no.min.js +1 -1
- package/dist/locale/no.min.mjs +1 -1
- package/dist/locale/no.mjs +1 -1
- package/dist/locale/pa.js +1 -1
- package/dist/locale/pa.min.js +1 -1
- package/dist/locale/pa.min.mjs +1 -1
- package/dist/locale/pa.mjs +1 -1
- package/dist/locale/pl.js +1 -1
- package/dist/locale/pl.min.js +1 -1
- package/dist/locale/pl.min.mjs +1 -1
- package/dist/locale/pl.mjs +1 -1
- package/dist/locale/pt-br.js +1 -1
- package/dist/locale/pt-br.min.js +1 -1
- package/dist/locale/pt-br.min.mjs +1 -1
- package/dist/locale/pt-br.mjs +1 -1
- package/dist/locale/pt.js +1 -1
- package/dist/locale/pt.min.js +1 -1
- package/dist/locale/pt.min.mjs +1 -1
- package/dist/locale/pt.mjs +1 -1
- package/dist/locale/ro.js +1 -1
- package/dist/locale/ro.min.js +1 -1
- package/dist/locale/ro.min.mjs +1 -1
- package/dist/locale/ro.mjs +1 -1
- package/dist/locale/ru.js +1 -1
- package/dist/locale/ru.min.js +1 -1
- package/dist/locale/ru.min.mjs +1 -1
- package/dist/locale/ru.mjs +1 -1
- package/dist/locale/sk.js +1 -1
- package/dist/locale/sk.min.js +1 -1
- package/dist/locale/sk.min.mjs +1 -1
- package/dist/locale/sk.mjs +1 -1
- package/dist/locale/sl.js +1 -1
- package/dist/locale/sl.min.js +1 -1
- package/dist/locale/sl.min.mjs +1 -1
- package/dist/locale/sl.mjs +1 -1
- package/dist/locale/sr.js +1 -1
- package/dist/locale/sr.min.js +1 -1
- package/dist/locale/sr.min.mjs +1 -1
- package/dist/locale/sr.mjs +1 -1
- package/dist/locale/sv.js +1 -1
- package/dist/locale/sv.min.js +1 -1
- package/dist/locale/sv.min.mjs +1 -1
- package/dist/locale/sv.mjs +1 -1
- package/dist/locale/sw.js +1 -1
- package/dist/locale/sw.min.js +1 -1
- package/dist/locale/sw.min.mjs +1 -1
- package/dist/locale/sw.mjs +1 -1
- package/dist/locale/ta.js +1 -1
- package/dist/locale/ta.min.js +1 -1
- package/dist/locale/ta.min.mjs +1 -1
- package/dist/locale/ta.mjs +1 -1
- package/dist/locale/te.js +1 -1
- package/dist/locale/te.min.js +1 -1
- package/dist/locale/te.min.mjs +1 -1
- package/dist/locale/te.mjs +1 -1
- package/dist/locale/th.js +1 -1
- package/dist/locale/th.min.js +1 -1
- package/dist/locale/th.min.mjs +1 -1
- package/dist/locale/th.mjs +1 -1
- package/dist/locale/tk.js +1 -1
- package/dist/locale/tk.min.js +1 -1
- package/dist/locale/tk.min.mjs +1 -1
- package/dist/locale/tk.mjs +1 -1
- package/dist/locale/tr.js +1 -1
- package/dist/locale/tr.min.js +1 -1
- package/dist/locale/tr.min.mjs +1 -1
- package/dist/locale/tr.mjs +1 -1
- package/dist/locale/ug-cn.js +1 -1
- package/dist/locale/ug-cn.min.js +1 -1
- package/dist/locale/ug-cn.min.mjs +1 -1
- package/dist/locale/ug-cn.mjs +1 -1
- package/dist/locale/uk.js +1 -1
- package/dist/locale/uk.min.js +1 -1
- package/dist/locale/uk.min.mjs +1 -1
- package/dist/locale/uk.mjs +1 -1
- package/dist/locale/uz-uz.js +1 -1
- package/dist/locale/uz-uz.min.js +1 -1
- package/dist/locale/uz-uz.min.mjs +1 -1
- package/dist/locale/uz-uz.mjs +1 -1
- package/dist/locale/vi.js +1 -1
- package/dist/locale/vi.min.js +1 -1
- package/dist/locale/vi.min.mjs +1 -1
- package/dist/locale/vi.mjs +1 -1
- package/dist/locale/zh-cn.js +1 -1
- package/dist/locale/zh-cn.min.js +1 -1
- package/dist/locale/zh-cn.min.mjs +1 -1
- package/dist/locale/zh-cn.mjs +1 -1
- package/dist/locale/zh-hk.js +1 -1
- package/dist/locale/zh-hk.min.js +1 -1
- package/dist/locale/zh-hk.min.mjs +1 -1
- package/dist/locale/zh-hk.mjs +1 -1
- package/dist/locale/zh-mo.js +1 -1
- package/dist/locale/zh-mo.min.js +1 -1
- package/dist/locale/zh-mo.min.mjs +1 -1
- package/dist/locale/zh-mo.mjs +1 -1
- package/dist/locale/zh-tw.js +1 -1
- package/dist/locale/zh-tw.min.js +1 -1
- package/dist/locale/zh-tw.min.mjs +1 -1
- package/dist/locale/zh-tw.mjs +1 -1
- package/es/components/calendar/style/css.mjs +1 -1
- package/es/components/calendar/style/index.mjs +1 -1
- package/es/components/date-picker/src/date-picker.d.ts +3 -0
- package/es/components/date-picker/src/props.d.ts +1 -0
- package/es/components/dropdown/style/css.mjs +1 -1
- package/es/components/dropdown/style/index.mjs +1 -1
- package/es/components/image/src/image.vue.d.ts +1 -1
- package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs +15 -2
- package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/input/src/input2.mjs.map +1 -1
- package/es/components/input-tag/src/input-tag.vue.d.ts +1 -1
- package/es/components/popover/src/popover.vue.d.ts +3 -1
- package/es/components/popover/src/popover.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/es/components/popover/src/popover.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/popover/src/popover2.mjs.map +1 -1
- package/es/components/time-picker/src/common/picker.mjs.map +1 -1
- package/es/components/time-picker/src/common/picker.vue.d.ts +3 -0
- package/es/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.mjs +5 -1
- package/es/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/time-picker/src/common/props.d.ts +2 -0
- package/es/components/time-picker/src/common/props.mjs +4 -0
- package/es/components/time-picker/src/common/props.mjs.map +1 -1
- package/es/components/time-picker/src/composables/use-common-picker.d.ts +1 -0
- package/es/components/time-picker/src/composables/use-time-picker.mjs +8 -2
- package/es/components/time-picker/src/composables/use-time-picker.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/basic-time-spinner.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.mjs +17 -2
- package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/panel-time-pick.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.mjs +7 -2
- package/es/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/panel-time-range.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.mjs +7 -2
- package/es/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker.d.ts +3 -0
- package/es/components/tooltip/src/tooltip.vue.d.ts +2 -2
- package/es/version.mjs +1 -1
- package/es/version.mjs.map +1 -1
- package/lib/components/calendar/style/css.js +1 -1
- package/lib/components/calendar/style/index.js +1 -1
- package/lib/components/date-picker/src/date-picker.d.ts +3 -0
- package/lib/components/date-picker/src/props.d.ts +1 -0
- package/lib/components/dropdown/style/css.js +1 -1
- package/lib/components/dropdown/style/index.js +1 -1
- package/lib/components/image/src/image.vue.d.ts +1 -1
- package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js +15 -2
- package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/input/src/input2.js.map +1 -1
- package/lib/components/input-tag/src/input-tag.vue.d.ts +1 -1
- package/lib/components/popover/src/popover.vue.d.ts +3 -1
- package/lib/components/popover/src/popover.vue_vue_type_script_setup_true_lang.js +1 -1
- package/lib/components/popover/src/popover.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/popover/src/popover2.js.map +1 -1
- package/lib/components/time-picker/src/common/picker.js.map +1 -1
- package/lib/components/time-picker/src/common/picker.vue.d.ts +3 -0
- package/lib/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.js +5 -1
- package/lib/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/time-picker/src/common/props.d.ts +2 -0
- package/lib/components/time-picker/src/common/props.js +4 -0
- package/lib/components/time-picker/src/common/props.js.map +1 -1
- package/lib/components/time-picker/src/composables/use-common-picker.d.ts +1 -0
- package/lib/components/time-picker/src/composables/use-time-picker.js +7 -1
- package/lib/components/time-picker/src/composables/use-time-picker.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.js +17 -2
- package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/panel-time-pick.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.js +7 -2
- package/lib/components/time-picker/src/time-picker-com/panel-time-pick.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/panel-time-range.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.js +7 -2
- package/lib/components/time-picker/src/time-picker-com/panel-time-range.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/time-picker/src/time-picker.d.ts +3 -0
- package/lib/components/tooltip/src/tooltip.vue.d.ts +2 -2
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +2 -2
- package/tags.json +1 -1
- package/theme-chalk/el-input.css +1 -1
- package/theme-chalk/index.css +1 -1
- package/theme-chalk/src/input.scss +23 -0
- package/web-types.json +1 -1
package/es/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker.vue_vue_type_script_setup_true_lang.mjs","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2OA,MAAM,QAAQ;EACd,MAAM,OAAO;EAWb,MAAM,QAAQ,UAAS;EAEvB,MAAM,SAAS,aAAa,OAAM;EAClC,MAAM,UAAU,aAAa,QAAO;EACpC,MAAM,UAAU,aAAa,QAAO;EAEpC,MAAM,EAAE,aAAa,aAAY;EACjC,MAAM,kBAAkB,OACtB,qCACA,EAAE,CACJ;EACA,MAAM,cAAc,eAAe,OAAO,KAAI;EAE9C,MAAM,YAAY,KAAqB;EACvC,MAAM,WAAW,KAAmB;EACpC,MAAM,cAAc,IAAiD,KAAI;EACzE,IAAI,wBAAwB;EAE5B,MAAM,iBAAiB,iBAAgB;EAEvC,MAAM,eAAe,gBAAgB,OAAO,KAAI;EAChD,MAAM,EACJ,aACA,qBACA,WACA,eACA,eACA,cACA,WACA,QACA,mBACA,kBACA,kBACE;EAEJ,MAAM,EAAE,WAAW,aAAa,eAAe,mBAAmB,UAAU;GAC1E,UAAU;GACV,cAAc;AACZ,WAAO,MAAM;;GAEf,aAAa;AACX,QAAI,CAAC,MAAM,kBAAmB;AAC9B,kBAAc,QAAQ;;GAExB,WAAW,OAAO;AAChB,WACE,CAAC,yBAAyB,UAAU,OAAO,qBAAqB,MAAK;;GAGzE,YAAY;AACV,kBAAa;AACb,kBAAc,QAAQ;AACtB,4BAAwB;AACxB,UAAM,iBACJ,UAAU,SAAS,OAAO,CAAC,OAAO,QAAQ,UAAU,IAAI,CAAA;;GAE7D,CAAA;EAED,MAAM,WAAW,IAAI,MAAK;EAE1B,MAAM,gBAAgB,eAAe;GACnC,OAAO,EAAE,SAAS;GAClB,OAAO,GAAG,UAAU,MAAM,KAAK;GAC/B,QAAQ,EAAE,UAAU;GACpB,OAAO,GAAG,YAAY,eAAe,MAAM;GAC3C,OAAO,GAAG,UAAU,cAAc,MAAM;GACxC,QAAQ,EAAE,SAAS;GACnB,aAAa,QAAQ,GAAG,UAAU,WAAW,MAAM,GAAG;GACtD,MAAM;GACP,CAAA;EAED,MAAM,eAAe,eAAe;GAClC,QAAQ,EAAE,OAAO;GACjB,QAAQ,EAAE,aAAa;GACvB,CAAC,aAAa,QAAQ,QAAQ,GAAG,cAAc,SAAS,GAAG;GAC5D,CAAA;AAED,QAAM,gBAAgB,QAAQ;AAC5B,OAAI,CAAC,KAAK;AACR,cAAU,QAAQ;AAClB,mBAAe;AACb,gBAAW,MAAM,WAAU;MAC5B;SAED,gBAAe;AACb,QAAI,IACF,aAAY,QAAQ,MAAM;KAE7B;IAEJ;EACD,MAAM,cACJ,KACA,YACG;AAEH,OAAI,WAAW,CAAC,YAAY,KAAK,YAAY,MAAM,EAAE;AACnD,SAAK,cAAc,IAAG;AAEtB,gBAAY,YAAY,QAAQ;AAChC,UAAM,iBACJ,UAAU,SAAS,SAAS,CAAC,OAAO,QAAQ,UAAU,IAAI,CAAA;;;EAGhE,MAAM,eAAe,MAAqB;AACxC,QAAK,WAAW,EAAC;;EAGnB,MAAM,WAAW,eAAmC;AAClD,OAAI,SAAS,MACX,QAAO,MAAM,KACX,SAAS,MAAM,IAAI,iBAAiB,QAAO,CAC7C;AAEF,UAAO,EAAC;IACT;EAGD,MAAM,qBAAqB,OAAe,KAAa,QAAwB;GAC7E,MAAM,UAAU,SAAS;AACzB,OAAI,CAAC,QAAQ,OAAQ;AACrB,OAAI,CAAC,OAAO,QAAQ,OAAO;AACzB,YAAQ,GAAG,kBAAkB,OAAO,IAAG;AACvC,YAAQ,GAAG,OAAM;cACR,QAAQ,OAAO;AACxB,YAAQ,GAAG,kBAAkB,OAAO,IAAG;AACvC,YAAQ,GAAG,OAAM;;;EAIrB,MAAM,qBAAqB;AACzB,uBAAoB,QAAQ;;EAG9B,MAAM,eAAe;AACnB,QAAK,kBAAkB,KAAI;;EAG7B,MAAM,eAAe;AACnB,uBAAoB,QAAQ;AAC5B,iBAAc,QAAQ;AACtB,QAAK,kBAAkB,MAAK;;EAG9B,MAAM,mBAAmB;AACvB,iBAAc,QAAQ;;EAGxB,MAAM,oBAAoB;AACxB,iBAAc,QAAQ;;EAGxB,MAAM,eAAe,eAA0B;GAC7C,MAAM,iBAAiB,eAAe,YAAY,MAAK;AACvD,OAAI,QAAQ,UAAU,MAAM,CAC1B,QAAO,CACL,UAAU,MAAM,MAAO,kBAAkB,eAAe,MAAO,IAC/D,UAAU,MAAM,MAAO,kBAAkB,eAAe,MAAO,GACjE;YACS,UAAU,UAAU,KAC7B,QAAO,UAAU;AAEnB,OAAI,CAAC,aAAa,SAAS,aAAa,MAAO,QAAO;AACtD,OAAI,CAAC,cAAc,SAAS,aAAa,MAAO,QAAO;AACvD,OAAI,eACF,QAAO,cAAc,SAAS,eAAe,SAAS,cAAc,QAC/D,eAAiC,KAAK,KAAI,GAC3C;AAEN,UAAO;IACR;EAED,MAAM,mBAAmB,eAAe,MAAM,KAAK,SAAS,OAAO,CAAA;EAEnE,MAAM,eAAe,eAAe,MAAM,KAAK,WAAW,OAAO,CAAA;EAEjE,MAAM,gBAAgB,eAAe,MAAM,SAAS,QAAO;EAE3D,MAAM,iBAAiB,eAAe,MAAM,SAAS,SAAQ;EAE7D,MAAM,gBAAgB,eAAe,MAAM,SAAS,QAAO;EAE3D,MAAM,cAAc,eACZ,MAAM,eAAe,iBAAiB,QAAQ,QAAQ,UAC9D;EAEA,MAAM,eAAe,eAEjB,MAAM,aACN,CAAC,eAAe,SAChB,CAAC,MAAM,YACP,CAAC,aAAa,UACb,SAAS,SAAS,UAAU,OACjC;EAEA,MAAM,WAAW,UAAuB;AACtC,OAAI,MAAM,YAAY,eAAe,MAAO;AAC5C,OAAI,aAAa,OAAO;AACtB,WAAO,iBAAgB;AAGvB,QAAI,cAAc,MAAM,YACtB,eAAc,MAAM,aAAY;QAEhC,WAAU,YAAY,aAAa,MAAK;AAE1C,eAAW,YAAY,aAAa,OAAO,KAAI;AAC/C,YAAO;;AAET,QAAK,QAAO;;EAGd,MAAM,mBAAmB,OAAO,UAAsB;AACpD,OAAI,MAAM,YAAY,eAAe,MAAO;AAC5C,OACG,MAAM,QAAwB,YAAY,WAC3C,UAAU,SACV,CAAC,MAAM,kBAEP,eAAc,QAAQ;;EAG1B,MAAM,qBAAqB;AACzB,OAAI,MAAM,YAAY,eAAe,MAAO;AAC5C,OAAI,CAAC,aAAa,SAAS,MAAM,UAC/B,UAAS,QAAQ;;EAGrB,MAAM,qBAAqB;AACzB,YAAS,QAAQ;;EAGnB,MAAM,qBAAqB,UAAsB;AAC/C,OAAI,MAAM,YAAY,eAAe,MAAO;AAC5C,OACG,MAAM,QAAQ,GAAG,QAAwB,YAAY,WACtD,UAAU,SACV,CAAC,MAAM,kBAEP,eAAc,QAAQ;;EAI1B,MAAM,eAAe,eAAe;AAClC,UAAO,MAAM,KAAK,SAAS,QAAO;IACnC;EAED,MAAM,aAAa,aAAY;EAE/B,MAAM,WAAW,eAAe,MAAM,UAAU,EAAE,WAAW,WAAU;EAEvE,MAAM,aAAa,eACjB,WACC,MAAoB;GACnB,MAAM,kBAAkB,MAAM,SAAQ;GACtC,MAAM,UAAU,aAAa,SAAwC;AACrE,OACG,oBACE,EAAE,WAAW,mBACZ,EAAE,cAAc,CAAC,SAAS,gBAAgB,KAC9C,EAAE,WAAW,WACZ,WAAW,EAAE,cAAc,CAAC,SAAS,QAAQ,CAE9C;AACF,iBAAc,QAAQ;IAE1B;AAEA,wBAAsB;AACpB,iBAAa;IACd;EAED,MAAM,qBAAqB;AACzB,OAAI,UAAU,OAAO;IACnB,MAAM,QAAQ,sBAAsB,aAAa,MAAK;AACtD,QAAI,OAAO;AACT,SAAI,aAAa,MAAM,CACrB,WAAU,gBAAgB,MAAM,CAAA;AAElC,eAAU,QAAQ;;;AAGtB,OAAI,UAAU,UAAU,IAAI;AAC1B,cAAU,YAAY,aAAa,MAAK;AACxC,eAAW,YAAY,aAAa,OAAO,KAAI;AAC/C,cAAU,QAAQ;;;EAItB,MAAM,yBAAyB,UAAqB;AAClD,OAAI,CAAC,MAAO,QAAO;AACnB,UAAO,cAAc,MAAM,eAAgB,MAAK;;EAGlD,MAAM,kBAAkB,UAAqB;AAC3C,OAAI,CAAC,MAAO,QAAO;AAInB,UAHY,QAAQ,MAAK,GACrB,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,OAAO,CAAA,GACvC,MAAM,OAAO,MAAM,OAAM;;EAI/B,MAAM,gBAAgB,UAAqB;AACzC,UAAO,cAAc,MAAM,aAAc,MAAK;;EAGhD,MAAM,qBAAqB,OAAO,UAAiC;AACjE,OAAI,MAAM,YAAY,eAAe,MAAO;GAE5C,MAAM,OAAO,aAAa,MAAsB;AAChD,eAAY,MAAsB;AAClC,OAAI,SAAS,WAAW,KAAK;AAC3B,QAAI,cAAc,UAAU,MAAM;AAChC,mBAAc,QAAQ;AACtB,WAAM,gBAAe;AACrB,WAAM,iBAAgB;;AAExB;;AAGF,OAAI,SAAS,WAAW,MAAM;AAC5B,QAAI,cAAc,MAAM,mBAAmB;AACzC,WAAM,gBAAe;AACrB,WAAM,iBAAgB;;AAExB,QAAI,cAAc,UAAU,OAAO;AACjC,mBAAc,QAAQ;AACtB,WAAM,UAAS;;AAEjB,QAAI,cAAc,MAAM,mBAAmB;AACzC,mBAAc,MAAM,mBAAkB;AACtC;;;AAIJ,OAAI,SAAS,WAAW,KAAK;AAC3B,4BAAwB;AACxB;;AAGF,OAAI,SAAS,WAAW,SAAS,SAAS,WAAW,aAAa;AAChE,QAAI,CAAC,cAAc,MACjB,eAAc,QAAQ;aAEtB,UAAU,UAAU,QACpB,UAAU,UAAU,MACpB,aAAa,sBAAsB,aAAa,MAAM,CAAa,EACnE;AACA,mBAAa;AACb,mBAAc,QAAQ;;AAExB,UAAM,gBAAe;AACrB,UAAM,iBAAgB;AACtB;;AAIF,OAAI,UAAU,OAAO;AACnB,UAAM,iBAAgB;AACtB;;AAEF,OAAI,cAAc,MAAM,mBACtB,eAAc,MAAM,mBAAmB,MAAsB;;EAGjE,MAAM,eAAe,MAAc;AACjC,aAAU,QAAQ;AAGlB,OAAI,CAAC,cAAc,MACjB,eAAc,QAAQ;;EAI1B,MAAM,oBAAoB,UAAiB;GACzC,MAAM,SAAS,MAAM;AACrB,OAAI,UAAU,MACZ,WAAU,QAAQ,CAAC,OAAO,OAAO,UAAU,MAAM,GAAE;OAEnD,WAAU,QAAQ,CAAC,OAAO,OAAO,KAAI;;EAIzC,MAAM,kBAAkB,UAAiB;GACvC,MAAM,SAAS,MAAM;AACrB,OAAI,UAAU,MACZ,WAAU,QAAQ,CAAC,UAAU,MAAM,IAAI,OAAO,MAAK;OAEnD,WAAU,QAAQ,CAAC,MAAM,OAAO,MAAK;;EAIzC,MAAM,0BAA0B;GAC9B,MAAM,SAAS,UAAU;GACzB,MAAM,QAAQ,sBAAsB,UAAU,OAAO,GAAG;GACxD,MAAM,YAAY,MAAM,YAAY;AACpC,OAAI,SAAS,MAAM,SAAS,EAAE;AAC5B,cAAU,QAAQ,CAChB,eAAe,MAAM,EACrB,aAAa,QAAQ,MAAM,KAC7B;IACA,MAAM,WAAW,CAAC,OAAO,cAAc,UAAU,MAAM,MAAM;AAC7D,QAAI,aAAa,SAAS,EAAE;AAC1B,eAAU,gBAAgB,SAAS,CAAA;AACnC,eAAU,QAAQ;;;;EAKxB,MAAM,wBAAwB;GAC5B,MAAM,SAAS,MAAM,UAAU;GAC/B,MAAM,QAAQ,sBAAsB,UAAU,OAAO,GAAG;GACxD,MAAM,YAAY,MAAM,YAAY;AACpC,OAAI,SAAS,MAAM,SAAS,EAAE;AAC5B,cAAU,QAAQ,CAChB,MAAM,aAAa,GAAG,MAAM,MAC5B,eAAe,MAAM,CACvB;IACA,MAAM,WAAW,CAAC,aAAa,UAAU,IAAI,MAAM;AACnD,QAAI,aAAa,SAAS,EAAE;AAC1B,eAAU,gBAAgB,SAAS,CAAA;AACnC,eAAU,QAAQ;;;;EAKxB,MAAM,cAAc;AAClB,YAAS,OAAO,OAAM;;EAGxB,MAAM,aAAa;AACjB,YAAS,OAAO,MAAK;;AAGvB,UAAQ,2BAA2B;GACjC;GACA;GACD,CAAA;AACD,UAAQ,kCAAkC,aAAY;AAEtD,WAAa;GAIX;GAIA;GAIA;GAIA;GAIA;GACD,CAAA;;uBAnsBC,YAiLa,MAAA,UAAA,EAjLb,WAiLa;aAhLP;IAAJ,KAAI;IACH,SAAS,MAAA,cAAa;IACvB,QAAO;IACP,MAAA;IACA,SAAQ;MACAA,KAAAA,QAAM;IACd,MAAK;IACL,YAAA;IACC,YAAU,GAAK,MAAA,OAAM,CAAC,UAAU,MAAK;IACrC,gBAAY,CAAA,GAAM,MAAA,OAAM,CAAC,UAAU,MAAK,kBAAmBC,KAAAA,YAAW;IACtE,gBAAcC,KAAAA;IACd,kBAAgB,MAAA,gBAAe;IAC/B,uBAAqBC,KAAAA;IACrB,oBAAkB;IAClB,WAAWC,KAAAA;IACX,2BAAyB;IACzB,cAAY;IACb,YAAA;IACc;IACP;IACA;;IAEI,SAAO,cAqEL,EAnEF,aAAA,sBADT,YAoEW,MAAA,QAAA,EAAA;;KAlER,IAAwGC,KAAAA;cAIrG;KAAJ,KAAI;KACJ,kBAAe;KACd,eAAiH,aAAA;KAIjH,MAA0GC,KAAAA;KAI1G,MAAM,MAAA,WAAU;KAChB,UAAU,MAAA,eAAc;KACxB,aAAaC,KAAAA;KACb,OAAK,eAAA;MAAc,MAAA,OAAM,CAAC,EAAC,SAAA;MAAsB,MAAA,OAAM,CAAC,GAAE,UAAWC,KAAAA,KAAI;MAAa,MAAA,OAAM,CAAC,GAAE,SAAU,MAAA,cAAa,CAAA;MAAaR,KAAAA,OAAO;;KAM1I,OAAK,eAAEA,KAAAA,OAAO,MAAK;KACnB,WAAsBS,KAAAA,YAAsBC,KAAAA,YAAsB,cAAA,SAA2B,eAAA,SAA4B,cAAA,SAA2BF,KAAAA,SAAI;KAQxJ,cAAYG,KAAAA;KACZ,UAAUC,KAAAA;KACV,kBAAgB;KAChB,SAAO;KACP,SAAO,MAAA,YAAW;KAClB,QAAM,MAAA,WAAU;KAChB,WAAS;KACT,UAAQ;KACR,aAAW;KACX,cAAY;KACZ,cAAY;0BACQ;KACpB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;;KAEA,QAAM,cAQL,CANF,YAAA,sBADR,YAOU,MAAA,OAAA,EAAA;;MALP,OAAK,eAAE,MAAA,QAAO,CAAC,EAAC,OAAA,CAAA;MAChB,aAAS,cAAU,kBAAgB,CAAA,UAAA,CAAA;2BACf;;6BAEU,eAA/B,YAA+B,wBAAf,YAAA,MAAW,CAAA;;;KAGpB,QAAM,cAQL,CANF,aAAA,SAAgBC,KAAAA,0BADxB,YAOU,MAAA,OAAA,EAAA;;MALP,OAAK,eAAA,GAAK,MAAA,QAAO,CAAC,EAAC,OAAA,CAAA,aAAA;MACnB,aAAS,cAAU,MAAA,KAAI,EAAA,CAAA,UAAA,CAAA;MACvB,SAAO;;6BAEqB,eAA7B,YAA6B,wBAAbA,KAAAA,UAAS,CAAA;;;;;;;;;;;;;;;;;;wBAI/B,YA0DuB,8BAAA;;KAxDpB,IAAwGR,KAAAA;cAIrG;KAAJ,KAAI;KACH,eAAa,aAAA;KACb,MAA0GC,KAAAA;KAI1G,UAAU,MAAA,eAAc;KACxB,UAAQ,CAAGG,KAAAA,YAAYC,KAAAA;KACvB,qBAAmBI,KAAAA;KACnB,mBAAiBC,KAAAA;KACjB,OAAK,eAAE,cAAA,MAAa;KACpB,OAAK,eAAEf,KAAAA,OAAO,MAAK;KACnB,cAAYW,KAAAA;KACZ,UAAUC,KAAAA;KACX,cAAa;KACb,MAAK;KACJ,SAAO;KACP,SAAO,MAAA,YAAW;KAClB,QAAM,MAAA,WAAU;KAChB,cAAa;KACb,eAAc;KACd,YAAW;KACX,aAAY;KACZ,aAAW;KACX,cAAY;KACZ,cAAY;0BACQ;KACpB,WAAS;;KAEC,QAAM,cAML,CAJF,YAAA,sBADR,YAKU,MAAA,OAAA,EAAA;;MAHP,OAAK,eAAA,CAAG,MAAA,QAAO,CAAC,EAAC,OAAA,EAAU,MAAA,QAAO,CAAC,EAAC,OAAA,CAAA,CAAA;;6BAEN,eAA/B,YAA+B,wBAAf,YAAA,MAAW,CAAA;;;KAGpB,mBAAe,cAGjB,CAFP,WAEO,KAAA,QAAA,mBAAA,EAAA,QAAA,CADL,mBAAiE,QAAA,EAA1D,OAAK,eAAE,MAAA,QAAO,CAAC,EAAC,YAAA,CAAA,oBAAkBI,KAAAA,eAAc,EAAA,EAAA;KAGhD,QAAM,cAQL,CANFH,KAAAA,0BADR,YAOU,MAAA,OAAA,EAAA;;MALP,OAAK,eAAE,aAAA,MAAY;MACnB,aAAS,cAAU,MAAA,KAAI,EAAA,CAAA,UAAA,CAAA;MACvB,SAAO;;6BAEqB,eAA7B,YAA6B,wBAAbA,KAAAA,UAAS,CAAA;;;;;;;;;;;;;;;;;;;IAKtB,SAAO,cAsBd,CArBF,WAqBE,KAAA,QAAA,WAAA;KApBC,SAAS,MAAA,cAAa;KACtB,eAAgB,MAAA,oBAAmB;KACnC,aAAc,MAAA,YAAW;KACzB,QAAQI,KAAAA;KACR,YAAaC,KAAAA;KACb,YAAaC,KAAAA;KACb,cAAeC,KAAAA;KACf,MAAMZ,KAAAA;KACN,cAAea,KAAAA;KACf,SAAUC,KAAAA;KACV,aAAcC,KAAAA;KACd,YAAaC,KAAAA;KACb,gBAAkBC,KAAAA;KAClB,QAAI,OAAA,OAAA,OAAA,kBAAE,MAAA,OAAA,IAAA,MAAA,OAAA,CAAA,GAAA,KAAM;KACZ,eAAc;KACd,mBAAiB,OAAA,OAAA,OAAA,kBAAE,MAAA,kBAAA,IAAA,MAAA,kBAAA,CAAA,GAAA,KAAiB;KACpC,kBAAe,OAAA,OAAA,OAAA,kBAAE,MAAA,iBAAA,IAAA,MAAA,iBAAA,CAAA,GAAA,KAAgB;KAC1B;KACP,eAAY,OAAA,OAAA,OAAA,kBAAE,MAAA,cAAA,IAAA,MAAA,cAAA,CAAA,GAAA,KAAa;KAC3B,aAAS,OAAA,OAAA,OAAA,KAAA,oBAAV,IAAe,CAAA,OAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"picker.vue_vue_type_script_setup_true_lang.mjs","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>>;
|
|
@@ -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: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props.mjs","names":[],"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,yBAAyB,WAAW;CAI/C,mBAAmB;EACjB,MAAM;EACN,SAAS;EACV;CAID,IAAI,EACF,MAAM,eAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,MAAM,EACJ,MAAM,eAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,aAAa,uBAAuB;CAIpC,aAAa,uBAAuB;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,MAAM,eAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAAS;EACV;CAID,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAM,eAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAAS;EACV;CAID,MAAM;CAIN,UAAU;CAIV,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,aAAa;EACX,MAAM;EACN,SAAS;EACV;CAID,eAAe;EACb,MAAM,eAAiC,OAAO;EAC9C,gBAAgB,EAAE;EACnB;CAID,YAAY;EACV,MAAM,eAAsC;GAAC;GAAM;GAAO;GAAQ;GAAO,CAAC;EAC1E,SAAS;EACV;CAID,gBAAgB;EACd,MAAM;EACN,SAAS;EACV;CAID,kBAAkB;CAIlB,gBAAgB;CAIhB,cAAc,EACZ,MAAM,eAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,aAAa,EACX,MAAM,eAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,SAAS;CACT,GAAG;CAIH,cAAc,EACZ,MAAM,UACP;CAID,eAAe,EACb,MAAM,UACP;CAID,WAAW;EACT,MAAM;EACN,eAAe,EAAE;EAClB;CAID,cAAc;CAId,UAAU;EACR,MAAM,eAAgC,CAAC,QAAQ,OAAO,CAAC;EACvD,SAAS;EACV;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CAID,cAAc;CAId,WAAW;EACT,MAAM,eAA0B,OAAO;EACvC,QAAQ;EACR,SAAS;EACV;CAID,oBAAoB;EAClB,MAAM,eAA4B,MAAM;EACxC,SAAS;GAAC;GAAU;GAAO;GAAS;GAAO;EAC5C;CACD,GAAG;CACH,GAAG,aAAa,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;
|
|
1
|
+
{"version":3,"file":"props.mjs","names":[],"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,yBAAyB,WAAW;CAI/C,mBAAmB;EACjB,MAAM;EACN,SAAS;EACV;CAID,IAAI,EACF,MAAM,eAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,MAAM,EACJ,MAAM,eAAsC,CAAC,OAAO,OAAO,CAAC,EAC7D;CAID,aAAa,uBAAuB;CAIpC,aAAa,uBAAuB;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,MAAM,eAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAAS;EACV;CAID,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAM,eAAmC,CAAC,QAAQ,OAAO,CAAC;EAC1D,SAAS;EACV;CAID,MAAM;CAIN,UAAU;CAIV,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,aAAa;EACX,MAAM;EACN,SAAS;EACV;CAID,eAAe;EACb,MAAM,eAAiC,OAAO;EAC9C,gBAAgB,EAAE;EACnB;CAID,YAAY;EACV,MAAM,eAAsC;GAAC;GAAM;GAAO;GAAQ;GAAO,CAAC;EAC1E,SAAS;EACV;CAID,gBAAgB;EACd,MAAM;EACN,SAAS;EACV;CAID,kBAAkB;CAIlB,gBAAgB;CAIhB,cAAc,EACZ,MAAM,eAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,aAAa,EACX,MAAM,eAAoC,CAAC,MAAM,MAAM,CAAC,EACzD;CAID,SAAS;CACT,GAAG;CAIH,cAAc,EACZ,MAAM,UACP;CAID,eAAe,EACb,MAAM,UACP;CAID,WAAW;EACT,MAAM;EACN,eAAe,EAAE;EAClB;CAID,cAAc;CAId,UAAU;EACR,MAAM,eAAgC,CAAC,QAAQ,OAAO,CAAC;EACvD,SAAS;EACV;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CAID,cAAc;CAId,WAAW;EACT,MAAM,eAA0B,OAAO;EACvC,QAAQ;EACR,SAAS;EACV;CAID,oBAAoB;EAClB,MAAM,eAA4B,MAAM;EACxC,SAAS;GAAC;GAAU;GAAO;GAAS;GAAO;EAC5C;CACD,GAAG;CACH,GAAG,aAAa,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,8BAA8B,WAAW;CACpD,IAAI,EACF,MAAM,eAAyB,MAAM,EACtC;CACD,MAAM,EACJ,MAAM,eAAyB,MAAM,EACtC;CACD,YAAY,EACV,MAAM,eAA0B,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>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { makeList } from "../utils.mjs";
|
|
2
|
-
import { ref, watch } from "vue";
|
|
2
|
+
import { ref, toValue, watch } from "vue";
|
|
3
3
|
|
|
4
4
|
//#region ../../packages/components/time-picker/src/composables/use-time-picker.ts
|
|
5
5
|
const makeAvailableArr = (disabledList) => {
|
|
@@ -40,9 +40,15 @@ const buildAvailableTimeSlotGetter = (disabledHours, disabledMinutes, disabledSe
|
|
|
40
40
|
getAvailableSeconds
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
|
-
const useOldValue = (props) => {
|
|
43
|
+
const useOldValue = (props, options) => {
|
|
44
44
|
const oldValue = ref(props.parsedValue);
|
|
45
45
|
watch(() => props.visible, (val) => {
|
|
46
|
+
const modelValue = toValue(options.modelValue);
|
|
47
|
+
const valueOnClear = toValue(options.valueOnClear);
|
|
48
|
+
if (val && modelValue === valueOnClear) {
|
|
49
|
+
oldValue.value = valueOnClear;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
46
52
|
if (!val) oldValue.value = props.parsedValue;
|
|
47
53
|
});
|
|
48
54
|
return oldValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-time-picker.mjs","names":[],"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
|
|
1
|
+
{"version":3,"file":"use-time-picker.mjs","names":[],"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,SAAO,SAAS,IAAI,wBAAwB,gBAAgB,MAAM,QAAQ,EAAE;;CAG9E,MAAM,kBAAkB,MAAc,MAAc,YAAoB;AACtE,SAAO,SACL,IACA,0BAA0B,kBAAkB,MAAM,MAAM,QAAQ,EACjE;;CAGH,MAAM,kBACJ,MACA,QACA,MACA,YACG;AACH,SAAO,SACL,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,WAAW,IAAI,MAAM,YAAY;AAEvC,aACQ,MAAM,UACX,QAAQ;EACP,MAAM,aAAa,QAAQ,QAAQ,WAAW;EAC9C,MAAM,eAAe,QAAQ,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.mjs","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.mjs","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":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CHANGE_EVENT } from "../../../../constants/event.mjs";
|
|
2
2
|
import { isNumber } from "../../../../utils/types.mjs";
|
|
3
|
+
import { rAF } from "../../../../utils/raf.mjs";
|
|
3
4
|
import { getStyle } from "../../../../utils/dom/style.mjs";
|
|
4
5
|
import { useNamespace } from "../../../../hooks/use-namespace/index.mjs";
|
|
5
6
|
import { ElIcon } from "../../../icon/index.mjs";
|
|
@@ -26,11 +27,16 @@ var basic_time_spinner_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
|
|
|
26
27
|
],
|
|
27
28
|
setup(__props, { emit: __emit }) {
|
|
28
29
|
const props = __props;
|
|
29
|
-
const { isRange, format } = inject(PICKER_BASE_INJECTION_KEY).props;
|
|
30
|
+
const { isRange, format, saveOnBlur } = inject(PICKER_BASE_INJECTION_KEY).props;
|
|
30
31
|
const emit = __emit;
|
|
31
32
|
const ns = useNamespace("time");
|
|
32
33
|
const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(props.disabledHours, props.disabledMinutes, props.disabledSeconds);
|
|
33
34
|
let isScrolling = false;
|
|
35
|
+
const ignoreScroll = {
|
|
36
|
+
hours: false,
|
|
37
|
+
minutes: false,
|
|
38
|
+
seconds: false
|
|
39
|
+
};
|
|
34
40
|
const currentScrollbar = ref();
|
|
35
41
|
const listRefsMap = {
|
|
36
42
|
hours: ref(),
|
|
@@ -110,7 +116,15 @@ var basic_time_spinner_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
|
|
|
110
116
|
const adjustSpinner = (type, value) => {
|
|
111
117
|
if (props.arrowControl) return;
|
|
112
118
|
const scrollbar = unref(listRefsMap[type]);
|
|
113
|
-
if (scrollbar && scrollbar.$el)
|
|
119
|
+
if (scrollbar && scrollbar.$el) {
|
|
120
|
+
if (!saveOnBlur) {
|
|
121
|
+
ignoreScroll[type] = true;
|
|
122
|
+
rAF(() => {
|
|
123
|
+
ignoreScroll[type] = false;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
getScrollbarElement(scrollbar.$el).scrollTop = Math.max(0, value * typeItemHeight(type));
|
|
127
|
+
}
|
|
114
128
|
};
|
|
115
129
|
const typeItemHeight = (type) => {
|
|
116
130
|
const listItem = unref(listRefsMap[type])?.$el.querySelector("li");
|
|
@@ -163,6 +177,7 @@ var basic_time_spinner_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
|
|
|
163
177
|
}
|
|
164
178
|
};
|
|
165
179
|
const handleScroll = (type) => {
|
|
180
|
+
if (!saveOnBlur && ignoreScroll[type]) return;
|
|
166
181
|
const scrollbar = unref(listRefsMap[type]);
|
|
167
182
|
if (!scrollbar) return;
|
|
168
183
|
isScrolling = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-time-spinner.vue_vue_type_script_setup_true_lang.mjs","names":["showSeconds","arrowControl","amPmMode"],"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":"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"}
|
|
1
|
+
{"version":3,"file":"basic-time-spinner.vue_vue_type_script_setup_true_lang.mjs","names":["showSeconds","arrowControl","amPmMode"],"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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel-time-pick.mjs","names":[],"sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/panel-time-pick.vue"],"sourcesContent":["<template>\n <transition :name=\"transitionName\">\n <div v-if=\"actualVisible || visible\" :class=\"ns.b('panel')\">\n <div :class=\"[ns.be('panel', 'content'), { 'has-seconds': showSeconds }]\">\n <time-spinner\n ref=\"spinner\"\n :role=\"datetimeRole || 'start'\"\n :arrow-control=\"arrowControl\"\n :show-seconds=\"showSeconds\"\n :am-pm-mode=\"amPmMode\"\n :spinner-date=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n parsedValue as any\n \"\n :disabled-hours=\"disabledHours\"\n :disabled-minutes=\"disabledMinutes\"\n :disabled-seconds=\"disabledSeconds\"\n @change=\"handleChange\"\n @set-option=\"onSetOption\"\n @select-range=\"setSelectionRange\"\n />\n </div>\n <div :class=\"ns.be('panel', 'footer')\">\n <button\n type=\"button\"\n :class=\"[ns.be('panel', 'btn'), 'cancel']\"\n @click=\"handleCancel\"\n >\n {{ t('el.datepicker.cancel') }}\n </button>\n <button\n type=\"button\"\n :class=\"[ns.be('panel', 'btn'), 'confirm']\"\n @click=\"handleConfirm()\"\n >\n {{ t('el.datepicker.confirm') }}\n </button>\n </div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport { getEventCode, isUndefined } from '@element-plus/utils'\nimport { PICKER_BASE_INJECTION_KEY } from '../constants'\nimport { panelTimePickerProps } from '../props/panel-time-picker'\nimport { useTimePanel } from '../composables/use-time-panel'\nimport {\n buildAvailableTimeSlotGetter,\n useOldValue,\n} from '../composables/use-time-picker'\nimport TimeSpinner from './basic-time-spinner.vue'\n\nimport type { Dayjs } from 'dayjs'\n\nconst props = defineProps(panelTimePickerProps)\nconst emit = defineEmits(['pick', 'select-range', 'set-picker-option'])\n\n// Injections\nconst pickerBase = inject(PICKER_BASE_INJECTION_KEY) as any\nconst {\n arrowControl,\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n defaultValue,\n} = pickerBase.props\nconst { getAvailableHours, getAvailableMinutes, getAvailableSeconds } =\n buildAvailableTimeSlotGetter(disabledHours, disabledMinutes, disabledSeconds)\n\nconst ns = useNamespace('time')\nconst { t, lang } = useLocale()\n// data\nconst selectionRange = ref([0, 2])\nconst oldValue = useOldValue(props)\n// computed\nconst transitionName = computed(() => {\n return isUndefined(props.actualVisible)\n ? `${ns.namespace.value}-zoom-in-top`\n : ''\n})\nconst showSeconds = computed(() => {\n return props.format.includes('ss')\n})\nconst amPmMode = computed(() => {\n if (props.format.includes('A')) return 'A'\n if (props.format.includes('a')) return 'a'\n return ''\n})\n// method\nconst isValidValue = (_date: Dayjs) => {\n const parsedDate = dayjs(_date).locale(lang.value)\n const result = getRangeAvailableTime(parsedDate)\n return parsedDate.isSame(result)\n}\nconst handleCancel = () => {\n const old = oldValue.value\n emit('pick', old, false)\n nextTick(() => {\n oldValue.value = old\n })\n}\nconst handleConfirm = (visible = false, first = false) => {\n if (first) return\n emit('pick', props.parsedValue, visible)\n}\nconst handleChange = (_date: Dayjs) => {\n // visible avoids edge cases, when use scrolls during panel closing animation\n if (!props.visible) {\n return\n }\n const result = getRangeAvailableTime(_date).millisecond(0)\n emit('pick', result, true)\n}\n\nconst setSelectionRange = (start: number, end: number) => {\n emit('select-range', start, end)\n selectionRange.value = [start, end]\n}\n\nconst changeSelectionRange = (step: number) => {\n const actualFormat = props.format\n const hourIndex = actualFormat.indexOf('HH')\n const minuteIndex = actualFormat.indexOf('mm')\n const secondIndex = actualFormat.indexOf('ss')\n const list: number[] = []\n const mapping: string[] = []\n if (hourIndex !== -1) {\n list.push(hourIndex)\n mapping.push('hours')\n }\n if (minuteIndex !== -1) {\n list.push(minuteIndex)\n mapping.push('minutes')\n }\n if (secondIndex !== -1 && showSeconds.value) {\n list.push(secondIndex)\n mapping.push('seconds')\n }\n\n const index = list.indexOf(selectionRange.value[0])\n const next = (index + step + list.length) % list.length\n timePickerOptions['start_emitSelectRange'](mapping[next])\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n\n const { left, right, up, down } = EVENT_CODE\n\n if ([left, right].includes(code)) {\n const step = code === left ? -1 : 1\n changeSelectionRange(step)\n event.preventDefault()\n return\n }\n\n if ([up, down].includes(code)) {\n const step = code === up ? -1 : 1\n timePickerOptions['start_scrollDown'](step)\n event.preventDefault()\n return\n }\n}\n\nconst { timePickerOptions, onSetOption, getAvailableTime } = useTimePanel({\n getAvailableHours,\n getAvailableMinutes,\n getAvailableSeconds,\n})\n\nconst getRangeAvailableTime = (date: Dayjs) => {\n return getAvailableTime(date, props.datetimeRole || '', true)\n}\n\nconst parseUserInput = (value: Dayjs) => {\n if (!value) return null\n return dayjs(value, props.format).locale(lang.value)\n}\n\nconst getDefaultValue = () => {\n return dayjs(defaultValue).locale(lang.value)\n}\n\nemit('set-picker-option', ['isValidValue', isValidValue])\nemit('set-picker-option', ['parseUserInput', parseUserInput])\nemit('set-picker-option', ['handleKeydownInput', handleKeydown])\nemit('set-picker-option', ['getRangeAvailableTime', getRangeAvailableTime])\nemit('set-picker-option', ['getDefaultValue', getDefaultValue])\n</script>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"panel-time-pick.mjs","names":[],"sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/panel-time-pick.vue"],"sourcesContent":["<template>\n <transition :name=\"transitionName\">\n <div v-if=\"actualVisible || visible\" :class=\"ns.b('panel')\">\n <div :class=\"[ns.be('panel', 'content'), { 'has-seconds': showSeconds }]\">\n <time-spinner\n ref=\"spinner\"\n :role=\"datetimeRole || 'start'\"\n :arrow-control=\"arrowControl\"\n :show-seconds=\"showSeconds\"\n :am-pm-mode=\"amPmMode\"\n :spinner-date=\"\n // https://github.com/vuejs/language-tools/issues/2104#issuecomment-3092541527\n parsedValue as any\n \"\n :disabled-hours=\"disabledHours\"\n :disabled-minutes=\"disabledMinutes\"\n :disabled-seconds=\"disabledSeconds\"\n @change=\"handleChange\"\n @set-option=\"onSetOption\"\n @select-range=\"setSelectionRange\"\n />\n </div>\n <div :class=\"ns.be('panel', 'footer')\">\n <button\n type=\"button\"\n :class=\"[ns.be('panel', 'btn'), 'cancel']\"\n @click=\"handleCancel\"\n >\n {{ t('el.datepicker.cancel') }}\n </button>\n <button\n type=\"button\"\n :class=\"[ns.be('panel', 'btn'), 'confirm']\"\n @click=\"handleConfirm()\"\n >\n {{ t('el.datepicker.confirm') }}\n </button>\n </div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport { getEventCode, isUndefined } from '@element-plus/utils'\nimport { PICKER_BASE_INJECTION_KEY } from '../constants'\nimport { panelTimePickerProps } from '../props/panel-time-picker'\nimport { useTimePanel } from '../composables/use-time-panel'\nimport {\n buildAvailableTimeSlotGetter,\n useOldValue,\n} from '../composables/use-time-picker'\nimport TimeSpinner from './basic-time-spinner.vue'\n\nimport type { Dayjs } from 'dayjs'\n\nconst props = defineProps(panelTimePickerProps)\nconst emit = defineEmits(['pick', 'select-range', 'set-picker-option'])\n\n// Injections\nconst pickerBase = inject(PICKER_BASE_INJECTION_KEY) as any\nconst {\n arrowControl,\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n defaultValue,\n} = pickerBase.props\nconst { getAvailableHours, getAvailableMinutes, getAvailableSeconds } =\n buildAvailableTimeSlotGetter(disabledHours, disabledMinutes, disabledSeconds)\n\nconst ns = useNamespace('time')\nconst { t, lang } = useLocale()\n// data\nconst selectionRange = ref([0, 2])\n\nconst oldValue = useOldValue(props, {\n modelValue: computed(() => pickerBase.props.modelValue),\n valueOnClear: computed(() =>\n pickerBase?.emptyValues ? pickerBase.emptyValues.valueOnClear.value : null\n ),\n})\n\n// computed\nconst transitionName = computed(() => {\n return isUndefined(props.actualVisible)\n ? `${ns.namespace.value}-zoom-in-top`\n : ''\n})\nconst showSeconds = computed(() => {\n return props.format.includes('ss')\n})\nconst amPmMode = computed(() => {\n if (props.format.includes('A')) return 'A'\n if (props.format.includes('a')) return 'a'\n return ''\n})\n// method\nconst isValidValue = (_date: Dayjs) => {\n const parsedDate = dayjs(_date).locale(lang.value)\n const result = getRangeAvailableTime(parsedDate)\n return parsedDate.isSame(result)\n}\nconst handleCancel = () => {\n const old = oldValue.value\n emit('pick', old, false)\n nextTick(() => {\n oldValue.value = old\n })\n}\nconst handleConfirm = (visible = false, first = false) => {\n if (first) return\n emit('pick', props.parsedValue, visible)\n}\nconst handleChange = (_date: Dayjs) => {\n // visible avoids edge cases, when use scrolls during panel closing animation\n if (!props.visible) {\n return\n }\n const result = getRangeAvailableTime(_date).millisecond(0)\n emit('pick', result, true)\n}\n\nconst setSelectionRange = (start: number, end: number) => {\n emit('select-range', start, end)\n selectionRange.value = [start, end]\n}\n\nconst changeSelectionRange = (step: number) => {\n const actualFormat = props.format\n const hourIndex = actualFormat.indexOf('HH')\n const minuteIndex = actualFormat.indexOf('mm')\n const secondIndex = actualFormat.indexOf('ss')\n const list: number[] = []\n const mapping: string[] = []\n if (hourIndex !== -1) {\n list.push(hourIndex)\n mapping.push('hours')\n }\n if (minuteIndex !== -1) {\n list.push(minuteIndex)\n mapping.push('minutes')\n }\n if (secondIndex !== -1 && showSeconds.value) {\n list.push(secondIndex)\n mapping.push('seconds')\n }\n\n const index = list.indexOf(selectionRange.value[0])\n const next = (index + step + list.length) % list.length\n timePickerOptions['start_emitSelectRange'](mapping[next])\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n\n const { left, right, up, down } = EVENT_CODE\n\n if ([left, right].includes(code)) {\n const step = code === left ? -1 : 1\n changeSelectionRange(step)\n event.preventDefault()\n return\n }\n\n if ([up, down].includes(code)) {\n const step = code === up ? -1 : 1\n timePickerOptions['start_scrollDown'](step)\n event.preventDefault()\n return\n }\n}\n\nconst { timePickerOptions, onSetOption, getAvailableTime } = useTimePanel({\n getAvailableHours,\n getAvailableMinutes,\n getAvailableSeconds,\n})\n\nconst getRangeAvailableTime = (date: Dayjs) => {\n return getAvailableTime(date, props.datetimeRole || '', true)\n}\n\nconst parseUserInput = (value: Dayjs) => {\n if (!value) return null\n return dayjs(value, props.format).locale(lang.value)\n}\n\nconst getDefaultValue = () => {\n return dayjs(defaultValue).locale(lang.value)\n}\n\nemit('set-picker-option', ['isValidValue', isValidValue])\nemit('set-picker-option', ['parseUserInput', parseUserInput])\nemit('set-picker-option', ['handleKeydownInput', handleKeydown])\nemit('set-picker-option', ['getRangeAvailableTime', getRangeAvailableTime])\nemit('set-picker-option', ['getDefaultValue', getDefaultValue])\nemit('set-picker-option', ['handleCancel', handleCancel])\n</script>\n"],"mappings":""}
|
|
@@ -23,12 +23,16 @@ var panel_time_pick_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
23
23
|
setup(__props, { emit: __emit }) {
|
|
24
24
|
const props = __props;
|
|
25
25
|
const emit = __emit;
|
|
26
|
-
const
|
|
26
|
+
const pickerBase = inject(PICKER_BASE_INJECTION_KEY);
|
|
27
|
+
const { arrowControl, disabledHours, disabledMinutes, disabledSeconds, defaultValue } = pickerBase.props;
|
|
27
28
|
const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } = buildAvailableTimeSlotGetter(disabledHours, disabledMinutes, disabledSeconds);
|
|
28
29
|
const ns = useNamespace("time");
|
|
29
30
|
const { t, lang } = useLocale();
|
|
30
31
|
const selectionRange = ref([0, 2]);
|
|
31
|
-
const oldValue = useOldValue(props
|
|
32
|
+
const oldValue = useOldValue(props, {
|
|
33
|
+
modelValue: computed(() => pickerBase.props.modelValue),
|
|
34
|
+
valueOnClear: computed(() => pickerBase?.emptyValues ? pickerBase.emptyValues.valueOnClear.value : null)
|
|
35
|
+
});
|
|
32
36
|
const transitionName = computed(() => {
|
|
33
37
|
return isUndefined(props.actualVisible) ? `${ns.namespace.value}-zoom-in-top` : "";
|
|
34
38
|
});
|
|
@@ -121,6 +125,7 @@ var panel_time_pick_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
121
125
|
emit("set-picker-option", ["handleKeydownInput", handleKeydown]);
|
|
122
126
|
emit("set-picker-option", ["getRangeAvailableTime", getRangeAvailableTime]);
|
|
123
127
|
emit("set-picker-option", ["getDefaultValue", getDefaultValue]);
|
|
128
|
+
emit("set-picker-option", ["handleCancel", handleCancel]);
|
|
124
129
|
return (_ctx, _cache) => {
|
|
125
130
|
return openBlock(), createBlock(Transition, { name: transitionName.value }, {
|
|
126
131
|
default: withCtx(() => [_ctx.actualVisible || _ctx.visible ? (openBlock(), createElementBlock("div", {
|