element-plus-mobile 0.1.1 → 0.1.2
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/README.md +1 -1
- package/attributes.json +1 -1
- package/dist/index.css +1 -1
- package/dist/index.full.js +594 -905
- 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 +593 -904
- 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/component.mjs +3 -3
- package/es/components/button/src/button-custom.mjs +49 -1
- package/es/components/button/src/button-custom.mjs.map +1 -1
- package/es/components/button/src/button-group.mjs +1 -1
- package/es/components/button/src/button-group.mjs.map +1 -1
- package/es/components/button/src/button-group.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/button/src/button-group2.mjs.map +1 -1
- package/es/components/cascader/src/cascader.d.ts +3 -131
- package/es/components/cascader/src/cascader.mjs +15 -24
- package/es/components/cascader/src/cascader.mjs.map +1 -1
- package/es/components/cascader/src/cascader.vue.d.ts +0 -6
- package/es/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.mjs +12 -37
- package/es/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/cascader/src/cascader2.mjs.map +1 -1
- package/es/components/cascader-panel/src/index.mjs.map +1 -1
- package/es/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.mjs +8 -0
- package/es/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/color-picker/src/color-picker.d.ts +0 -16
- package/es/components/color-picker/src/color-picker.mjs +0 -3
- package/es/components/color-picker/src/color-picker.mjs.map +1 -1
- package/es/components/color-picker/src/color-picker.vue.d.ts +0 -1
- package/es/components/color-picker/src/color-picker.vue_vue_type_script_setup_true_lang.mjs +4 -14
- package/es/components/color-picker/src/color-picker.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/color-picker/src/color-picker2.mjs.map +1 -1
- package/es/components/countdown/src/countdown.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/es/components/date-picker/src/date-picker.d.ts +0 -3
- package/es/components/date-picker/src/props.d.ts +0 -1
- package/es/components/date-picker-panel/src/date-picker-com/panel-date-pick.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/es/components/date-picker-panel/src/date-picker-com/panel-date-range.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/es/components/date-picker-panel/src/date-picker-panel.d.ts +1 -1
- package/es/components/form/index.d.ts +2 -2
- package/es/components/form/src/form-item.d.ts +0 -15
- package/es/components/form/src/form-item.mjs +0 -11
- package/es/components/form/src/form-item.mjs.map +1 -1
- package/es/components/form/src/form-item.vue.d.ts +5 -6
- package/es/components/form/src/form-item.vue_vue_type_script_setup_true_lang.mjs +15 -46
- package/es/components/form/src/form-item.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/form/src/form-item2.mjs.map +1 -1
- package/es/components/form/src/form.d.ts +0 -20
- package/es/components/form/src/form.mjs +0 -15
- package/es/components/form/src/form.mjs.map +1 -1
- package/es/components/form/src/form.vue.d.ts +0 -2
- package/es/components/form/src/form.vue_vue_type_script_setup_true_lang.mjs +3 -19
- package/es/components/form/src/form.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/form/src/form2.mjs.map +1 -1
- package/es/components/form/src/types.d.ts +2 -5
- package/es/components/form/src/utils.mjs +1 -32
- package/es/components/form/src/utils.mjs.map +1 -1
- package/es/components/index.d.ts +2 -2
- package/es/components/index.mjs +6 -6
- package/es/components/input-number/src/input-number.d.ts +0 -5
- package/es/components/input-number/src/input-number.mjs +0 -1
- package/es/components/input-number/src/input-number.mjs.map +1 -1
- package/es/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.mjs +2 -4
- package/es/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/input-number/src/input-number2.mjs.map +1 -1
- package/es/components/link/src/link.d.ts +2 -2
- package/es/components/link/src/link.mjs +3 -9
- package/es/components/link/src/link.mjs.map +1 -1
- package/es/components/link/src/link.vue.d.ts +1 -1
- package/es/components/link/src/link.vue_vue_type_script_setup_true_lang.mjs +2 -13
- package/es/components/link/src/link.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/link/src/link2.mjs.map +1 -1
- package/es/components/menu/src/menu.mjs +1 -1
- package/es/components/message-box/src/index.vue_vue_type_script_lang.mjs +1 -1
- package/es/components/scrollbar/src/thumb.vue_vue_type_script_setup_true_lang.mjs +26 -77
- package/es/components/scrollbar/src/thumb.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/scrollbar/src/thumb2.mjs.map +1 -1
- package/es/components/select/src/select-dropdown.mjs +7 -10
- package/es/components/select/src/select-dropdown.mjs.map +1 -1
- package/es/components/select/src/select-dropdown.vue_vue_type_script_lang.mjs +4 -22
- package/es/components/select/src/select-dropdown.vue_vue_type_script_lang.mjs.map +1 -1
- package/es/components/select/src/select.d.ts +1 -21
- package/es/components/select/src/select.mjs +0 -32
- package/es/components/select/src/select.mjs.map +1 -1
- package/es/components/select/src/select.vue.d.ts +0 -40
- package/es/components/select/src/select.vue_vue_type_script_lang.mjs +1 -1
- package/es/components/select/src/select.vue_vue_type_script_lang.mjs.map +1 -1
- package/es/components/select/src/select2.mjs +8 -44
- package/es/components/select/src/select2.mjs.map +1 -1
- package/es/components/select/src/useSelect.mjs +12 -26
- package/es/components/select/src/useSelect.mjs.map +1 -1
- package/es/components/select-v2/src/defaults.d.ts +1 -21
- package/es/components/select-v2/src/defaults.mjs +1 -38
- package/es/components/select-v2/src/defaults.mjs.map +1 -1
- package/es/components/select-v2/src/select.mjs +8 -44
- package/es/components/select-v2/src/select.mjs.map +1 -1
- package/es/components/select-v2/src/select.vue.d.ts +0 -38
- package/es/components/select-v2/src/select.vue_vue_type_script_lang.mjs +1 -1
- package/es/components/select-v2/src/select.vue_vue_type_script_lang.mjs.map +1 -1
- package/es/components/select-v2/src/useSelect.mjs +20 -60
- package/es/components/select-v2/src/useSelect.mjs.map +1 -1
- package/es/components/space/src/space.d.ts +21 -7
- package/es/components/space/src/space.mjs +2 -5
- package/es/components/space/src/space.mjs.map +1 -1
- package/es/components/space/src/use-space.mjs +7 -4
- package/es/components/space/src/use-space.mjs.map +1 -1
- package/es/components/splitter/src/split-bar.mjs.map +1 -1
- package/es/components/splitter/src/split-bar.vue_vue_type_script_setup_true_lang.mjs +51 -58
- package/es/components/splitter/src/split-bar.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/splitter/src/splitter.d.ts +1 -1
- package/es/components/splitter/src/splitter.mjs +1 -1
- package/es/components/splitter/src/splitter.mjs.map +1 -1
- package/es/components/splitter/src/splitter.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/splitter/src/splitter2.mjs.map +1 -1
- package/es/components/table/src/table.vue_vue_type_script_lang.mjs +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 +0 -3
- package/es/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.mjs +4 -3
- 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 +0 -1
- package/es/components/time-picker/src/common/props.mjs +0 -1
- package/es/components/time-picker/src/common/props.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.mjs +1 -1
- package/es/components/time-picker/src/time-picker.d.ts +0 -3
- package/es/components/time-picker/src/time-picker.mjs +2 -3
- package/es/components/time-picker/src/time-picker.mjs.map +1 -1
- package/es/components/time-select/src/time-select.d.ts +0 -7
- package/es/components/time-select/src/time-select.mjs +0 -4
- package/es/components/time-select/src/time-select.mjs.map +1 -1
- package/es/components/time-select/src/time-select.vue.d.ts +0 -3
- package/es/components/time-select/src/time-select.vue_vue_type_script_setup_true_lang.mjs +0 -2
- package/es/components/time-select/src/time-select.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/time-select/src/time-select2.mjs.map +1 -1
- package/es/components/transfer/src/composables/index.d.ts +2 -1
- package/es/components/transfer/src/composables/index.mjs +2 -1
- package/es/components/transfer/src/composables/use-tab.d.ts +15 -0
- package/es/components/transfer/src/composables/use-tab.mjs +47 -0
- package/es/components/transfer/src/composables/use-tab.mjs.map +1 -0
- package/es/components/transfer/src/transfer-panel.d.ts +2 -3
- package/es/components/transfer/src/transfer-panel.vue.d.ts +4 -31
- package/es/components/transfer/src/transfer-panel.vue_vue_type_script_setup_true_lang.mjs +40 -67
- package/es/components/transfer/src/transfer-panel.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/transfer/src/transfer-panel2.mjs.map +1 -1
- package/es/components/transfer/src/transfer.vue.d.ts +359 -5
- package/es/components/transfer/src/transfer.vue_vue_type_script_setup_true_lang.mjs +162 -55
- package/es/components/transfer/src/transfer.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/transfer/src/transfer2.mjs.map +1 -1
- package/es/components/tree-select/src/tree-select.vue.d.ts +0 -37
- package/es/components/tree-select/src/tree.mjs +16 -3
- package/es/components/tree-select/src/tree.mjs.map +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.mjs +11 -11
- package/es/plugin.mjs +1 -1
- package/es/version.mjs +1 -1
- package/es/version.mjs.map +1 -1
- package/lib/component.js +107 -107
- package/lib/components/button/src/button-custom.js +49 -1
- package/lib/components/button/src/button-custom.js.map +1 -1
- package/lib/components/button/src/button-group.js +1 -1
- package/lib/components/button/src/button-group.js.map +1 -1
- package/lib/components/button/src/button-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/button/src/button-group2.js.map +1 -1
- package/lib/components/cascader/src/cascader.d.ts +3 -131
- package/lib/components/cascader/src/cascader.js +19 -29
- package/lib/components/cascader/src/cascader.js.map +1 -1
- package/lib/components/cascader/src/cascader.vue.d.ts +0 -6
- package/lib/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.js +36 -61
- package/lib/components/cascader/src/cascader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/cascader/src/cascader2.js.map +1 -1
- package/lib/components/cascader-panel/src/index.js.map +1 -1
- package/lib/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.js +8 -0
- package/lib/components/cascader-panel/src/index.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/color-picker/src/color-picker.d.ts +0 -16
- package/lib/components/color-picker/src/color-picker.js +0 -3
- package/lib/components/color-picker/src/color-picker.js.map +1 -1
- package/lib/components/color-picker/src/color-picker.vue.d.ts +0 -1
- package/lib/components/color-picker/src/color-picker.vue_vue_type_script_setup_true_lang.js +21 -31
- package/lib/components/color-picker/src/color-picker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/color-picker/src/color-picker2.js.map +1 -1
- package/lib/components/countdown/src/countdown.vue_vue_type_script_setup_true_lang.js +1 -1
- package/lib/components/date-picker/src/date-picker.d.ts +0 -3
- package/lib/components/date-picker/src/props.d.ts +0 -1
- package/lib/components/date-picker-panel/src/date-picker-com/panel-date-pick.vue_vue_type_script_setup_true_lang.js +18 -18
- package/lib/components/date-picker-panel/src/date-picker-com/panel-date-pick.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/date-picker-panel/src/date-picker-com/panel-date-range.vue_vue_type_script_setup_true_lang.js +23 -23
- package/lib/components/date-picker-panel/src/date-picker-com/panel-date-range.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/date-picker-panel/src/date-picker-panel.d.ts +1 -1
- package/lib/components/form/index.d.ts +2 -2
- package/lib/components/form/src/form-item.d.ts +0 -15
- package/lib/components/form/src/form-item.js +0 -11
- package/lib/components/form/src/form-item.js.map +1 -1
- package/lib/components/form/src/form-item.vue.d.ts +5 -6
- package/lib/components/form/src/form-item.vue_vue_type_script_setup_true_lang.js +14 -45
- package/lib/components/form/src/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/form/src/form-item2.js.map +1 -1
- package/lib/components/form/src/form.d.ts +0 -20
- package/lib/components/form/src/form.js +0 -15
- package/lib/components/form/src/form.js.map +1 -1
- package/lib/components/form/src/form.vue.d.ts +0 -2
- package/lib/components/form/src/form.vue_vue_type_script_setup_true_lang.js +2 -18
- package/lib/components/form/src/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/form/src/form2.js.map +1 -1
- package/lib/components/form/src/types.d.ts +2 -5
- package/lib/components/form/src/utils.js +0 -32
- package/lib/components/form/src/utils.js.map +1 -1
- package/lib/components/index.d.ts +2 -2
- package/lib/components/index.js +123 -123
- package/lib/components/input-number/src/input-number.d.ts +0 -5
- package/lib/components/input-number/src/input-number.js +0 -1
- package/lib/components/input-number/src/input-number.js.map +1 -1
- package/lib/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.js +13 -15
- package/lib/components/input-number/src/input-number.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/input-number/src/input-number2.js.map +1 -1
- package/lib/components/link/src/link.d.ts +2 -2
- package/lib/components/link/src/link.js +3 -9
- package/lib/components/link/src/link.js.map +1 -1
- package/lib/components/link/src/link.vue.d.ts +1 -1
- package/lib/components/link/src/link.vue_vue_type_script_setup_true_lang.js +6 -17
- package/lib/components/link/src/link.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/link/src/link2.js.map +1 -1
- package/lib/components/menu/src/menu.js +7 -7
- package/lib/components/menu/src/menu.js.map +1 -1
- package/lib/components/message-box/src/index.vue_vue_type_script_lang.js +19 -19
- package/lib/components/message-box/src/index.vue_vue_type_script_lang.js.map +1 -1
- package/lib/components/scrollbar/src/thumb.vue_vue_type_script_setup_true_lang.js +26 -77
- package/lib/components/scrollbar/src/thumb.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/scrollbar/src/thumb2.js.map +1 -1
- package/lib/components/select/src/select-dropdown.js +6 -9
- package/lib/components/select/src/select-dropdown.js.map +1 -1
- package/lib/components/select/src/select-dropdown.vue_vue_type_script_lang.js +3 -21
- package/lib/components/select/src/select-dropdown.vue_vue_type_script_lang.js.map +1 -1
- package/lib/components/select/src/select.d.ts +1 -21
- package/lib/components/select/src/select.js +10 -43
- package/lib/components/select/src/select.js.map +1 -1
- package/lib/components/select/src/select.vue.d.ts +0 -40
- package/lib/components/select/src/select.vue_vue_type_script_lang.js +12 -12
- package/lib/components/select/src/select.vue_vue_type_script_lang.js.map +1 -1
- package/lib/components/select/src/select2.js +8 -44
- package/lib/components/select/src/select2.js.map +1 -1
- package/lib/components/select/src/useSelect.js +11 -25
- package/lib/components/select/src/useSelect.js.map +1 -1
- package/lib/components/select-v2/src/defaults.d.ts +1 -21
- package/lib/components/select-v2/src/defaults.js +12 -50
- package/lib/components/select-v2/src/defaults.js.map +1 -1
- package/lib/components/select-v2/src/select.js +8 -44
- package/lib/components/select-v2/src/select.js.map +1 -1
- package/lib/components/select-v2/src/select.vue.d.ts +0 -38
- package/lib/components/select-v2/src/select.vue_vue_type_script_lang.js +12 -12
- package/lib/components/select-v2/src/select.vue_vue_type_script_lang.js.map +1 -1
- package/lib/components/select-v2/src/useSelect.js +19 -59
- package/lib/components/select-v2/src/useSelect.js.map +1 -1
- package/lib/components/space/src/space.d.ts +21 -7
- package/lib/components/space/src/space.js +2 -5
- package/lib/components/space/src/space.js.map +1 -1
- package/lib/components/space/src/use-space.js +7 -4
- package/lib/components/space/src/use-space.js.map +1 -1
- package/lib/components/splitter/src/split-bar.js.map +1 -1
- package/lib/components/splitter/src/split-bar.vue_vue_type_script_setup_true_lang.js +50 -57
- package/lib/components/splitter/src/split-bar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/splitter/src/splitter.d.ts +1 -1
- package/lib/components/splitter/src/splitter.js +1 -1
- package/lib/components/splitter/src/splitter.js.map +1 -1
- package/lib/components/splitter/src/splitter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/splitter/src/splitter2.js.map +1 -1
- package/lib/components/table/src/table.vue_vue_type_script_lang.js +8 -8
- package/lib/components/table/src/table.vue_vue_type_script_lang.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 +0 -3
- package/lib/components/time-picker/src/common/picker.vue_vue_type_script_setup_true_lang.js +4 -3
- 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 +0 -1
- package/lib/components/time-picker/src/common/props.js +0 -1
- package/lib/components/time-picker/src/common/props.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue_type_script_setup_true_lang.js +10 -10
- 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.d.ts +0 -3
- package/lib/components/time-picker/src/time-picker.js +0 -1
- package/lib/components/time-picker/src/time-picker.js.map +1 -1
- package/lib/components/time-select/src/time-select.d.ts +0 -7
- package/lib/components/time-select/src/time-select.js +0 -4
- package/lib/components/time-select/src/time-select.js.map +1 -1
- package/lib/components/time-select/src/time-select.vue.d.ts +0 -3
- package/lib/components/time-select/src/time-select.vue_vue_type_script_setup_true_lang.js +0 -2
- package/lib/components/time-select/src/time-select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/time-select/src/time-select2.js.map +1 -1
- package/lib/components/transfer/src/composables/index.d.ts +2 -1
- package/lib/components/transfer/src/composables/index.js +3 -1
- package/lib/components/transfer/src/composables/use-tab.d.ts +15 -0
- package/lib/components/transfer/src/composables/use-tab.js +49 -0
- package/lib/components/transfer/src/composables/use-tab.js.map +1 -0
- package/lib/components/transfer/src/transfer-panel.d.ts +2 -3
- package/lib/components/transfer/src/transfer-panel.vue.d.ts +4 -31
- package/lib/components/transfer/src/transfer-panel.vue_vue_type_script_setup_true_lang.js +40 -67
- package/lib/components/transfer/src/transfer-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/transfer/src/transfer-panel2.js.map +1 -1
- package/lib/components/transfer/src/transfer.vue.d.ts +359 -5
- package/lib/components/transfer/src/transfer.vue_vue_type_script_setup_true_lang.js +161 -54
- package/lib/components/transfer/src/transfer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/transfer/src/transfer2.js.map +1 -1
- package/lib/components/tree-select/src/tree-select.vue.d.ts +0 -37
- package/lib/components/tree-select/src/tree.js +15 -2
- package/lib/components/tree-select/src/tree.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +265 -265
- package/lib/plugin.js +12 -12
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +3 -3
- package/tags.json +1 -1
- package/theme-chalk/display.css +1 -1
- package/theme-chalk/el-cascader-panel.css +1 -1
- package/theme-chalk/el-cascader.css +1 -1
- package/theme-chalk/el-checkbox-group.css +1 -1
- package/theme-chalk/el-checkbox.css +1 -1
- package/theme-chalk/el-color-picker-panel.css +1 -1
- package/theme-chalk/el-color-picker.css +1 -1
- package/theme-chalk/el-date-picker-panel.css +1 -1
- package/theme-chalk/el-form-item.css +1 -1
- package/theme-chalk/el-form.css +1 -1
- package/theme-chalk/el-input-number.css +1 -1
- package/theme-chalk/el-input.css +1 -1
- package/theme-chalk/el-link.css +1 -1
- package/theme-chalk/el-option.css +1 -1
- package/theme-chalk/el-radio-group.css +1 -1
- package/theme-chalk/el-radio.css +1 -1
- package/theme-chalk/el-rate.css +1 -1
- package/theme-chalk/el-scrollbar.css +1 -1
- package/theme-chalk/el-segmented.css +1 -1
- package/theme-chalk/el-select-dropdown-v2.css +1 -1
- package/theme-chalk/el-select-dropdown.css +1 -1
- package/theme-chalk/el-select-v2.css +1 -1
- package/theme-chalk/el-select.css +1 -1
- package/theme-chalk/el-slider.css +1 -1
- package/theme-chalk/el-space.css +1 -1
- package/theme-chalk/el-splitter.css +1 -1
- package/theme-chalk/el-switch.css +1 -1
- package/theme-chalk/el-text.css +1 -1
- package/theme-chalk/el-time-picker.css +1 -1
- package/theme-chalk/el-time-select.css +1 -1
- package/theme-chalk/el-transfer.css +1 -1
- package/theme-chalk/el-upload.css +1 -1
- package/theme-chalk/index.css +1 -1
- package/theme-chalk/src/cascader-panel.scss +61 -0
- package/theme-chalk/src/cascader.scss +69 -0
- package/theme-chalk/src/checkbox-group.scss +6 -10
- package/theme-chalk/src/checkbox.scss +21 -23
- package/theme-chalk/src/color-picker-panel.scss +91 -16
- package/theme-chalk/src/color-picker.scss +64 -6
- package/theme-chalk/src/common/var.scss +10 -17
- package/theme-chalk/src/date-picker/date-picker.scss +75 -0
- package/theme-chalk/src/date-picker/date-range-picker.scss +95 -0
- package/theme-chalk/src/date-picker/picker-panel.scss +95 -1
- package/theme-chalk/src/date-picker/picker.scss +93 -0
- package/theme-chalk/src/date-picker/time-picker.scss +49 -0
- package/theme-chalk/src/date-picker/time-range-picker.scss +29 -0
- package/theme-chalk/src/date-picker/time-spinner.scss +35 -0
- package/theme-chalk/src/form-item.scss +20 -122
- package/theme-chalk/src/form.scss +0 -29
- package/theme-chalk/src/input-number.scss +24 -123
- package/theme-chalk/src/input.scss +18 -57
- package/theme-chalk/src/link.scss +0 -13
- package/theme-chalk/src/option.scss +11 -31
- package/theme-chalk/src/radio-group.scss +4 -6
- package/theme-chalk/src/radio.scss +21 -23
- package/theme-chalk/src/rate.scss +15 -17
- package/theme-chalk/src/scrollbar.scss +0 -2
- package/theme-chalk/src/segmented.scss +7 -9
- package/theme-chalk/src/select-dropdown.scss +35 -62
- package/theme-chalk/src/select.scss +37 -65
- package/theme-chalk/src/slider.scss +44 -45
- package/theme-chalk/src/space.scss +17 -8
- package/theme-chalk/src/splitter.scss +49 -81
- package/theme-chalk/src/switch.scss +36 -54
- package/theme-chalk/src/text.scss +0 -1
- package/theme-chalk/src/time-select.scss +17 -0
- package/theme-chalk/src/transfer.scss +223 -120
- package/theme-chalk/src/upload.scss +176 -2
- package/web-types.json +1 -1
- package/es/components/form/src/form-label-wrap.mjs +0 -72
- package/es/components/form/src/form-label-wrap.mjs.map +0 -1
- package/es/components/form/src/utils.d.ts +0 -13
- package/lib/components/form/src/form-label-wrap.js +0 -73
- package/lib/components/form/src/form-label-wrap.js.map +0 -1
- package/lib/components/form/src/utils.d.ts +0 -13
|
@@ -5,19 +5,19 @@ const require_event = require('../../../constants/event.js');
|
|
|
5
5
|
const require_event$1 = require('../../../utils/dom/event.js');
|
|
6
6
|
const require_error = require('../../../utils/error.js');
|
|
7
7
|
const require_builtin_icons = require('../../../utils/vue/builtin-icons.js');
|
|
8
|
-
const require_index = require('../../../
|
|
9
|
-
const require_index$1 = require('../../../hooks/use-
|
|
10
|
-
const require_index$2 = require('../../../hooks/use-
|
|
11
|
-
const require_index$3 = require('../../../hooks/use-
|
|
12
|
-
const require_index$4 = require('../../../hooks/use-
|
|
13
|
-
const require_index$5 = require('../../../hooks/use-empty-values/index.js');
|
|
8
|
+
const require_index = require('../../../hooks/use-locale/index.js');
|
|
9
|
+
const require_index$1 = require('../../../hooks/use-namespace/index.js');
|
|
10
|
+
const require_index$2 = require('../../../hooks/use-focus-controller/index.js');
|
|
11
|
+
const require_index$3 = require('../../../hooks/use-composition/index.js');
|
|
12
|
+
const require_index$4 = require('../../../hooks/use-empty-values/index.js');
|
|
14
13
|
const require_icon_content = require('../../icon/src/icon-content.js');
|
|
15
|
-
const require_index$
|
|
14
|
+
const require_index$5 = require('../../icon/index.js');
|
|
16
15
|
const require_use_form_common_props = require('../../form/src/hooks/use-form-common-props.js');
|
|
17
16
|
const require_use_form_item = require('../../form/src/hooks/use-form-item.js');
|
|
18
|
-
const require_index$
|
|
19
|
-
const require_index$
|
|
20
|
-
const require_index$
|
|
17
|
+
const require_index$6 = require('../../tooltip/index.js');
|
|
18
|
+
const require_index$7 = require('../../input/index.js');
|
|
19
|
+
const require_index$8 = require('../../scrollbar/index.js');
|
|
20
|
+
const require_index$9 = require('../../../directives/click-outside/index.js');
|
|
21
21
|
const require_index$10 = require('../../tag/index.js');
|
|
22
22
|
const require_index$11 = require('../../cascader-panel/index.js');
|
|
23
23
|
const require_cascader = require('./cascader.js');
|
|
@@ -35,40 +35,24 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
35
35
|
props: require_cascader.cascaderProps,
|
|
36
36
|
emits: require_cascader.cascaderEmits,
|
|
37
37
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
38
|
-
const popperOptions = { modifiers: [{
|
|
39
|
-
name: "arrowPosition",
|
|
40
|
-
enabled: true,
|
|
41
|
-
phase: "main",
|
|
42
|
-
fn: ({ state }) => {
|
|
43
|
-
const { modifiersData, placement } = state;
|
|
44
|
-
if ([
|
|
45
|
-
"right",
|
|
46
|
-
"left",
|
|
47
|
-
"bottom",
|
|
48
|
-
"top"
|
|
49
|
-
].includes(placement)) return;
|
|
50
|
-
if (modifiersData.arrow) modifiersData.arrow.x = 35;
|
|
51
|
-
},
|
|
52
|
-
requires: ["arrow"]
|
|
53
|
-
}] };
|
|
54
38
|
const props = __props;
|
|
55
39
|
const emit = __emit;
|
|
56
40
|
const attrs = (0, vue.useAttrs)();
|
|
57
41
|
const slots = (0, vue.useSlots)();
|
|
58
42
|
let inputInitialHeight = 0;
|
|
59
43
|
let pressDeleteCount = 0;
|
|
60
|
-
const nsCascader = require_index$
|
|
61
|
-
const nsInput = require_index$
|
|
44
|
+
const nsCascader = require_index$1.useNamespace("cascader");
|
|
45
|
+
const nsInput = require_index$1.useNamespace("input");
|
|
62
46
|
const sizeMapPadding = {
|
|
63
47
|
small: 7,
|
|
64
48
|
default: 11,
|
|
65
49
|
large: 15
|
|
66
50
|
};
|
|
67
|
-
const { t } = require_index
|
|
51
|
+
const { t } = require_index.useLocale();
|
|
68
52
|
const { formItem } = require_use_form_item.useFormItem();
|
|
69
53
|
const isDisabled = require_use_form_common_props.useFormDisabled();
|
|
70
|
-
const { valueOnClear } = require_index$
|
|
71
|
-
const { isComposing, handleComposition } = require_index$
|
|
54
|
+
const { valueOnClear } = require_index$4.useEmptyValues(props);
|
|
55
|
+
const { isComposing, handleComposition } = require_index$3.useComposition({ afterComposition(event) {
|
|
72
56
|
const text = event.target?.value;
|
|
73
57
|
handleInput(text);
|
|
74
58
|
} });
|
|
@@ -102,9 +86,14 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
102
86
|
const tagSize = (0, vue.computed)(() => realSize.value === "small" ? "small" : "default");
|
|
103
87
|
const multiple = (0, vue.computed)(() => !!props.props.multiple);
|
|
104
88
|
const readonly = (0, vue.computed)(() => !props.filterable || multiple.value);
|
|
89
|
+
const panelProps = (0, vue.computed)(() => ({
|
|
90
|
+
...props.props,
|
|
91
|
+
expandTrigger: "click",
|
|
92
|
+
hoverThreshold: 0
|
|
93
|
+
}));
|
|
105
94
|
const searchKeyword = (0, vue.computed)(() => multiple.value ? searchInputValue.value : inputValue.value);
|
|
106
95
|
const checkedNodes = (0, vue.computed)(() => cascaderPanelRef.value?.checkedNodes || []);
|
|
107
|
-
const { wrapperRef, isFocused, handleBlur } = require_index$
|
|
96
|
+
const { wrapperRef, isFocused, handleBlur } = require_index$2.useFocusController(inputRef, {
|
|
108
97
|
disabled: isDisabled,
|
|
109
98
|
beforeBlur(event) {
|
|
110
99
|
return tooltipRef.value?.isFocusInsideContent(event) || tagTooltipRef.value?.isFocusInsideContent(event);
|
|
@@ -393,21 +382,18 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
393
382
|
blur
|
|
394
383
|
});
|
|
395
384
|
return (_ctx, _cache) => {
|
|
396
|
-
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$
|
|
385
|
+
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$6.ElTooltip), {
|
|
397
386
|
ref_key: "tooltipRef",
|
|
398
387
|
ref: tooltipRef,
|
|
399
388
|
visible: popperVisible.value,
|
|
400
|
-
teleported: __props.teleported,
|
|
401
389
|
"popper-class": [(0, vue.unref)(nsCascader).e("dropdown"), __props.popperClass],
|
|
402
390
|
"popper-style": __props.popperStyle,
|
|
403
|
-
"popper-options": popperOptions,
|
|
404
|
-
"fallback-placements": __props.fallbackPlacements,
|
|
405
391
|
"stop-popper-mouse-event": false,
|
|
406
392
|
"gpu-acceleration": false,
|
|
407
|
-
|
|
408
|
-
transition: `${(0, vue.unref)(nsCascader).namespace.value}-
|
|
409
|
-
effect: __props.effect,
|
|
393
|
+
"show-arrow": false,
|
|
394
|
+
transition: `${(0, vue.unref)(nsCascader).namespace.value}-fade-in-linear`,
|
|
410
395
|
pure: "",
|
|
396
|
+
teleported: "",
|
|
411
397
|
persistent: __props.persistent,
|
|
412
398
|
onHide: hideSuggestionPanel
|
|
413
399
|
}, {
|
|
@@ -420,7 +406,7 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
420
406
|
onKeydown: handleKeyDown,
|
|
421
407
|
onMouseenter: _cache[9] || (_cache[9] = ($event) => inputHover.value = true),
|
|
422
408
|
onMouseleave: _cache[10] || (_cache[10] = ($event) => inputHover.value = false)
|
|
423
|
-
}, [(0, vue.createVNode)((0, vue.unref)(require_index$
|
|
409
|
+
}, [(0, vue.createVNode)((0, vue.unref)(require_index$7.ElInput), {
|
|
424
410
|
ref_key: "inputRef",
|
|
425
411
|
ref: inputRef,
|
|
426
412
|
modelValue: inputValue.value,
|
|
@@ -437,14 +423,14 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
437
423
|
onCompositionend: (0, vue.unref)(handleComposition),
|
|
438
424
|
onInput: handleInput
|
|
439
425
|
}, (0, vue.createSlots)({
|
|
440
|
-
suffix: (0, vue.withCtx)(() => [clearBtnVisible.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$
|
|
426
|
+
suffix: (0, vue.withCtx)(() => [clearBtnVisible.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$5.ElIcon), {
|
|
441
427
|
key: "clear",
|
|
442
428
|
class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), "icon-circle-close"]),
|
|
443
429
|
onClick: (0, vue.withModifiers)(handleClear, ["stop"])
|
|
444
430
|
}, {
|
|
445
431
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(require_icon_content.default, { icon: __props.clearIcon }, null, 8, ["icon"])]),
|
|
446
432
|
_: 1
|
|
447
|
-
}, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$
|
|
433
|
+
}, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$5.ElIcon), {
|
|
448
434
|
key: "arrow-down",
|
|
449
435
|
class: (0, vue.normalizeClass)(cascaderIconKls.value),
|
|
450
436
|
onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(($event) => togglePopperVisible(), ["stop"]))
|
|
@@ -499,21 +485,15 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
499
485
|
"onClose"
|
|
500
486
|
]);
|
|
501
487
|
}), 128))]),
|
|
502
|
-
__props.collapseTags && tags.value.length > __props.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$
|
|
488
|
+
__props.collapseTags && tags.value.length > __props.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$6.ElTooltip), {
|
|
503
489
|
key: 0,
|
|
504
490
|
ref_key: "tagTooltipRef",
|
|
505
491
|
ref: tagTooltipRef,
|
|
506
492
|
disabled: popperVisible.value || !__props.collapseTagsTooltip,
|
|
507
|
-
"
|
|
508
|
-
"bottom",
|
|
509
|
-
"top",
|
|
510
|
-
"right",
|
|
511
|
-
"left"
|
|
512
|
-
],
|
|
513
|
-
placement: "bottom",
|
|
493
|
+
trigger: "click",
|
|
514
494
|
"popper-class": __props.popperClass,
|
|
515
495
|
"popper-style": __props.popperStyle,
|
|
516
|
-
effect:
|
|
496
|
+
effect: "light",
|
|
517
497
|
persistent: __props.persistent
|
|
518
498
|
}, {
|
|
519
499
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(require_index$10.ElTag), {
|
|
@@ -530,7 +510,7 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
530
510
|
"type",
|
|
531
511
|
"effect"
|
|
532
512
|
])]),
|
|
533
|
-
content: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(require_index$
|
|
513
|
+
content: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(require_index$8.ElScrollbar), { "max-height": __props.maxCollapseTagsTooltipHeight }, {
|
|
534
514
|
default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("collapse-tags")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(collapseTagList.value, (tag, idx) => {
|
|
535
515
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
536
516
|
key: idx,
|
|
@@ -564,7 +544,6 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
564
544
|
"disabled",
|
|
565
545
|
"popper-class",
|
|
566
546
|
"popper-style",
|
|
567
|
-
"effect",
|
|
568
547
|
"persistent"
|
|
569
548
|
])) : (0, vue.createCommentVNode)("v-if", true),
|
|
570
549
|
__props.filterable && !(0, vue.unref)(isDisabled) ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("input", {
|
|
@@ -581,7 +560,7 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
581
560
|
onCompositionend: _cache[7] || (_cache[7] = (...args) => (0, vue.unref)(handleComposition) && (0, vue.unref)(handleComposition)(...args))
|
|
582
561
|
}, null, 42, _hoisted_1)), [[vue.vModelText, searchInputValue.value]]) : (0, vue.createCommentVNode)("v-if", true)
|
|
583
562
|
], 2)) : (0, vue.createCommentVNode)("v-if", true)], 38)), [[
|
|
584
|
-
(0, vue.unref)(require_index.default),
|
|
563
|
+
(0, vue.unref)(require_index$9.default),
|
|
585
564
|
handleClickOutside,
|
|
586
565
|
contentRef.value
|
|
587
566
|
]])]),
|
|
@@ -597,7 +576,7 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
597
576
|
modelValue: checkedValue.value,
|
|
598
577
|
"onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => checkedValue.value = $event),
|
|
599
578
|
options: __props.options,
|
|
600
|
-
props:
|
|
579
|
+
props: panelProps.value,
|
|
601
580
|
border: false,
|
|
602
581
|
"render-label": _ctx.$slots.default,
|
|
603
582
|
onExpandChange: handleExpandChange,
|
|
@@ -611,7 +590,7 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
611
590
|
"props",
|
|
612
591
|
"render-label"
|
|
613
592
|
]), [[vue.vShow, !filtering.value]]),
|
|
614
|
-
__props.filterable ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$
|
|
593
|
+
__props.filterable ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$8.ElScrollbar), {
|
|
615
594
|
key: 1,
|
|
616
595
|
ref_key: "suggestionPanel",
|
|
617
596
|
ref: suggestionPanel,
|
|
@@ -626,7 +605,7 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
626
605
|
class: (0, vue.normalizeClass)([(0, vue.unref)(nsCascader).e("suggestion-item"), (0, vue.unref)(nsCascader).is("checked", item.checked)]),
|
|
627
606
|
tabindex: -1,
|
|
628
607
|
onClick: ($event) => handleSuggestionClick(item)
|
|
629
|
-
}, [(0, vue.renderSlot)(_ctx.$slots, "suggestion-item", { item }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(item.text), 1), item.checked ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$
|
|
608
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "suggestion-item", { item }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(item.text), 1), item.checked ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_index$5.ElIcon), { key: 0 }, {
|
|
630
609
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(require_builtin_icons.Check))]),
|
|
631
610
|
_: 1
|
|
632
611
|
})) : (0, vue.createCommentVNode)("v-if", true)])], 10, _hoisted_2);
|
|
@@ -642,13 +621,9 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, v
|
|
|
642
621
|
_: 3
|
|
643
622
|
}, 8, [
|
|
644
623
|
"visible",
|
|
645
|
-
"teleported",
|
|
646
624
|
"popper-class",
|
|
647
625
|
"popper-style",
|
|
648
|
-
"fallback-placements",
|
|
649
|
-
"placement",
|
|
650
626
|
"transition",
|
|
651
|
-
"effect",
|
|
652
627
|
"persistent"
|
|
653
628
|
]);
|
|
654
629
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascader.vue_vue_type_script_setup_true_lang.js","names":["$slots","$nextTick"],"sources":["../../../../../../packages/components/cascader/src/cascader.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"tooltipRef\"\n :visible=\"popperVisible\"\n :teleported=\"teleported\"\n :popper-class=\"[nsCascader.e('dropdown'), popperClass!]\"\n :popper-style=\"popperStyle\"\n :popper-options=\"popperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :stop-popper-mouse-event=\"false\"\n :gpu-acceleration=\"false\"\n :placement=\"placement\"\n :transition=\"`${nsCascader.namespace.value}-zoom-in-top`\"\n :effect=\"effect\"\n pure\n :persistent=\"persistent\"\n @hide=\"hideSuggestionPanel\"\n >\n <template #default>\n <div\n ref=\"wrapperRef\"\n v-clickoutside:[contentRef]=\"handleClickOutside\"\n :class=\"cascaderKls\"\n :style=\"cascaderStyle\"\n @click=\"() => togglePopperVisible(readonly ? undefined : true)\"\n @keydown=\"handleKeyDown\"\n @mouseenter=\"inputHover = true\"\n @mouseleave=\"inputHover = false\"\n >\n <el-input\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :placeholder=\"currentPlaceholder\"\n :readonly=\"readonly\"\n :disabled=\"isDisabled\"\n :validate-event=\"false\"\n :size=\"realSize\"\n :class=\"inputClass\"\n :tabindex=\"multiple && filterable && !isDisabled ? -1 : undefined\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n @input=\"handleInput\"\n >\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearBtnVisible\"\n key=\"clear\"\n :class=\"[nsInput.e('icon'), 'icon-circle-close']\"\n @click.stop=\"handleClear\"\n >\n <el-icon-content :icon=\"clearIcon\" />\n </el-icon>\n <el-icon\n v-else\n key=\"arrow-down\"\n :class=\"cascaderIconKls\"\n @click.stop=\"togglePopperVisible()\"\n >\n <arrow-down />\n </el-icon>\n </template>\n </el-input>\n\n <div\n v-if=\"multiple\"\n ref=\"tagWrapper\"\n :class=\"[\n nsCascader.e('tags'),\n nsCascader.is('validate', Boolean(validateState)),\n ]\"\n >\n <slot name=\"tag\" :data=\"tags\" :delete-tag=\"deleteTag\">\n <el-tag\n v-for=\"tag in showTagList\"\n :key=\"tag.key\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </slot>\n <el-tooltip\n v-if=\"collapseTags && tags.length > maxCollapseTags\"\n ref=\"tagTooltipRef\"\n :disabled=\"popperVisible || !collapseTagsTooltip\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n placement=\"bottom\"\n :popper-class=\"popperClass\"\n :popper-style=\"popperStyle\"\n :effect=\"effect\"\n :persistent=\"persistent\"\n >\n <template #default>\n <el-tag\n :closable=\"false\"\n :size=\"tagSize\"\n :type=\"tagType\"\n :effect=\"tagEffect\"\n disable-transitions\n >\n <span :class=\"nsCascader.e('tags-text')\">\n + {{ tags.length - maxCollapseTags }}\n </span>\n </el-tag>\n </template>\n <template #content>\n <el-scrollbar :max-height=\"maxCollapseTagsTooltipHeight\">\n <div :class=\"nsCascader.e('collapse-tags')\">\n <div\n v-for=\"(tag, idx) in collapseTagList\"\n :key=\"idx\"\n :class=\"nsCascader.e('collapse-tag')\"\n >\n <el-tag\n :key=\"tag.key\"\n class=\"in-tooltip\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </div>\n </div>\n </el-scrollbar>\n </template>\n </el-tooltip>\n <input\n v-if=\"filterable && !isDisabled\"\n v-model=\"searchInputValue\"\n type=\"text\"\n :class=\"nsCascader.e('search-input')\"\n :placeholder=\"presentText ? '' : inputPlaceholder\"\n @input=\"(e) => handleInput(searchInputValue, e as InputEvent)\"\n @click.stop=\"togglePopperVisible(true)\"\n @keydown.delete=\"handleDelete\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n />\n </div>\n </div>\n </template>\n\n <template #content>\n <div v-if=\"$slots.header\" :class=\"nsCascader.e('header')\" @click.stop>\n <slot name=\"header\" />\n </div>\n <el-cascader-panel\n v-show=\"!filtering\"\n ref=\"cascaderPanelRef\"\n v-model=\"checkedValue\"\n :options=\"options\"\n :props=\"props.props\"\n :border=\"false\"\n :render-label=\"$slots.default\"\n @expand-change=\"handleExpandChange\"\n @close=\"$nextTick(() => togglePopperVisible(false))\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-panel>\n <el-scrollbar\n v-if=\"filterable\"\n v-show=\"filtering\"\n ref=\"suggestionPanel\"\n tag=\"ul\"\n :class=\"nsCascader.e('suggestion-panel')\"\n :view-class=\"nsCascader.e('suggestion-list')\"\n @keydown=\"handleSuggestionKeyDown\"\n >\n <template v-if=\"suggestions.length\">\n <li\n v-for=\"item in suggestions\"\n :key=\"item.uid\"\n :class=\"[\n nsCascader.e('suggestion-item'),\n nsCascader.is('checked', item.checked),\n ]\"\n :tabindex=\"-1\"\n @click=\"handleSuggestionClick(item)\"\n >\n <slot name=\"suggestion-item\" :item=\"item\">\n <span>{{ item.text }}</span>\n <el-icon v-if=\"item.checked\">\n <check />\n </el-icon>\n </slot>\n </li>\n </template>\n <slot v-else name=\"empty\">\n <li :class=\"nsCascader.e('empty-text')\">\n {{ t('el.cascader.noMatch') }}\n </li>\n </slot>\n </el-scrollbar>\n <div v-if=\"$slots.footer\" :class=\"nsCascader.e('footer')\" @click.stop>\n <slot name=\"footer\" />\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n markRaw,\n nextTick,\n onMounted,\n ref,\n useAttrs,\n watch,\n} from 'vue'\nimport { cloneDeep } from 'lodash-unified'\nimport { useCssVar, useDebounceFn, useResizeObserver } from '@vueuse/core'\nimport {\n ArrowDown,\n Check,\n CircleClose,\n debugWarn,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isPromise,\n} from '@element-plus/utils'\nimport ElCascaderPanel from '@element-plus/components/cascader-panel'\nimport ElInput from '@element-plus/components/input'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTag from '@element-plus/components/tag'\nimport ElIcon from '@element-plus/components/icon'\nimport ElIconContent from '@element-plus/components/icon/src/icon-content.vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport { ClickOutside as vClickoutside } from '@element-plus/directives'\nimport {\n useComposition,\n useEmptyValues,\n useFocusController,\n useLocale,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { cascaderEmits } from './cascader'\n\nimport type { Options } from '@element-plus/components/popper'\nimport type { ComputedRef, StyleValue } from 'vue'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { ScrollbarInstance } from '@element-plus/components/scrollbar'\nimport type {\n CascaderNode,\n CascaderPanelInstance,\n CascaderValue,\n Tag,\n} from '@element-plus/components/cascader-panel'\nimport type { CascaderComponentProps } from './cascader'\n\nconst popperOptions: Partial<Options> = {\n modifiers: [\n {\n name: 'arrowPosition',\n enabled: true,\n phase: 'main',\n fn: ({ state }) => {\n const { modifiersData, placement } = state\n if (['right', 'left', 'bottom', 'top'].includes(placement)) return\n if (modifiersData.arrow) {\n modifiersData.arrow.x = 35\n }\n },\n requires: ['arrow'],\n },\n ],\n}\n\ndefineOptions({\n name: 'ElCascader',\n})\n\nconst props = withDefaults(defineProps<CascaderComponentProps>(), {\n options: () => [],\n props: () => ({}),\n disabled: undefined,\n clearIcon: markRaw(CircleClose),\n filterMethod: (node, keyword) => node.text.includes(keyword),\n separator: ' / ',\n showAllLevels: true,\n maxCollapseTags: 1,\n debounce: 300,\n beforeFilter: () => true,\n placement: 'bottom-start',\n fallbackPlacements: () => [\n 'bottom-start',\n 'bottom',\n 'top-start',\n 'top',\n 'right',\n 'left',\n ],\n teleported: true,\n effect: 'light',\n tagType: 'info',\n tagEffect: 'light',\n validateEvent: true,\n persistent: true,\n showCheckedStrategy: 'child',\n showPrefix: true,\n popperStyle: undefined,\n valueOnClear: undefined,\n})\nconst emit = defineEmits(cascaderEmits)\nconst attrs = useAttrs()\nconst slots = defineSlots()\n\nlet inputInitialHeight = 0\nlet pressDeleteCount = 0\n\nconst nsCascader = useNamespace('cascader')\nconst nsInput = useNamespace('input')\nconst sizeMapPadding = {\n small: 7,\n default: 11,\n large: 15,\n}\n\nconst { t } = useLocale()\nconst { formItem } = useFormItem()\nconst isDisabled = useFormDisabled()\nconst { valueOnClear } = useEmptyValues(props)\nconst { isComposing, handleComposition } = useComposition({\n afterComposition(event) {\n const text = (event.target as HTMLInputElement)?.value\n handleInput(text)\n },\n})\n\nconst tooltipRef = ref<TooltipInstance>()\nconst tagTooltipRef = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst tagWrapper = ref<HTMLDivElement>()\nconst cascaderPanelRef = ref<CascaderPanelInstance>()\nconst suggestionPanel = ref<ScrollbarInstance>()\nconst popperVisible = ref(false)\nconst inputHover = ref(false)\nconst filtering = ref(false)\nconst inputValue = ref('')\nconst searchInputValue = ref('')\nconst tags = ref<Tag[]>([])\nconst suggestions = ref<CascaderNode[]>([])\n\nconst showTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags\n ? tags.value.slice(0, props.maxCollapseTags)\n : tags.value\n})\n\nconst collapseTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags ? tags.value.slice(props.maxCollapseTags) : []\n})\n\nconst cascaderStyle = computed(() => {\n return attrs.style as StyleValue\n})\n\nconst inputPlaceholder = computed(\n () => props.placeholder ?? t('el.cascader.placeholder')\n)\nconst currentPlaceholder = computed(() =>\n searchInputValue.value || tags.value.length > 0 || isComposing.value\n ? ''\n : inputPlaceholder.value\n)\nconst realSize = useFormSize()\nconst tagSize = computed(() =>\n realSize.value === 'small' ? 'small' : 'default'\n)\nconst multiple = computed(() => !!props.props.multiple)\nconst readonly = computed(() => !props.filterable || multiple.value)\nconst searchKeyword = computed(() =>\n multiple.value ? searchInputValue.value : inputValue.value\n)\nconst checkedNodes: ComputedRef<CascaderNode[]> = computed(\n () => cascaderPanelRef.value?.checkedNodes || []\n)\n\nconst { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {\n disabled: isDisabled,\n beforeBlur(event) {\n return (\n tooltipRef.value?.isFocusInsideContent(event) ||\n tagTooltipRef.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst clearBtnVisible = computed(() => {\n if (\n !props.clearable ||\n isDisabled.value ||\n filtering.value ||\n (!inputHover.value && !isFocused.value)\n )\n return false\n\n return !!checkedNodes.value.length\n})\nconst presentText = computed(() => {\n const { showAllLevels, separator } = props\n const nodes = checkedNodes.value\n return nodes.length\n ? multiple.value\n ? ''\n : nodes[0].calcText(showAllLevels, separator)\n : ''\n})\n\nconst validateState = computed(() => formItem?.validateState || '')\n\nconst checkedValue = computed<CascaderValue>({\n get() {\n return cloneDeep(props.modelValue) as CascaderValue\n },\n set(val) {\n // https://github.com/element-plus/element-plus/issues/17647\n const value = val ?? valueOnClear.value\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n if (props.validateEvent) {\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst cascaderKls = computed(() => {\n return [\n nsCascader.b(),\n nsCascader.m(realSize.value),\n nsCascader.is('disabled', isDisabled.value),\n attrs.class,\n ]\n})\n\nconst cascaderIconKls = computed(() => {\n return [\n nsInput.e('icon'),\n 'icon-arrow-down',\n nsCascader.is('reverse', popperVisible.value),\n ]\n})\n\nconst inputClass = computed(() => nsCascader.is('focus', isFocused.value))\n\nconst contentRef = computed(() => {\n return tooltipRef.value?.popperRef?.contentRef\n})\n\nconst handleClickOutside = (event: Event) => {\n if (isFocused.value) {\n const _event = new FocusEvent('blur', event)\n handleBlur(_event)\n }\n togglePopperVisible(false)\n}\n\nconst togglePopperVisible = (visible?: boolean) => {\n if (isDisabled.value) return\n\n visible = visible ?? !popperVisible.value\n\n if (visible !== popperVisible.value) {\n popperVisible.value = visible\n inputRef.value?.input?.setAttribute('aria-expanded', `${visible}`)\n\n if (visible) {\n updatePopperPosition()\n cascaderPanelRef.value &&\n nextTick(cascaderPanelRef.value.scrollToExpandingNode)\n } else if (props.filterable) {\n syncPresentTextValue()\n }\n\n emit('visibleChange', visible)\n }\n}\n\nconst updatePopperPosition = () => {\n nextTick(() => {\n tooltipRef.value?.updatePopper()\n })\n}\nconst hideSuggestionPanel = () => {\n filtering.value = false\n}\n\nconst genTag = (node: CascaderNode): Tag => {\n const { showAllLevels, separator } = props\n return {\n node,\n key: node.uid,\n text: node.calcText(showAllLevels, separator),\n hitState: false,\n closable: !isDisabled.value && !node.isDisabled,\n }\n}\n\nconst deleteTag = (tag: Tag) => {\n const node = tag.node as CascaderNode\n node.doCheck(false)\n cascaderPanelRef.value?.calculateCheckedValue()\n emit('removeTag', node.valueByOption)\n}\n\nconst getStrategyCheckedNodes = (): CascaderNode[] => {\n switch (props.showCheckedStrategy) {\n case 'child':\n return checkedNodes.value\n case 'parent': {\n const clickedNodes = getCheckedNodes(false)\n const clickedNodesValue = clickedNodes!.map((o) => o.value)\n const parentNodes = clickedNodes!.filter(\n (o) => !o.parent || !clickedNodesValue.includes(o.parent.value)\n )\n return parentNodes\n }\n default:\n return []\n }\n}\n\nconst calculatePresentTags = () => {\n if (!multiple.value) return\n\n const nodes = getStrategyCheckedNodes()\n\n const allTags: Tag[] = []\n nodes.forEach((node) => allTags.push(genTag(node)))\n tags.value = allTags\n}\n\nconst calculateSuggestions = () => {\n const { filterMethod, showAllLevels, separator } = props\n const res = cascaderPanelRef.value\n ?.getFlattedNodes(!props.props.checkStrictly)\n ?.filter((node) => {\n if (node.isDisabled) return false\n node.calcText(showAllLevels, separator)\n return filterMethod(node, searchKeyword.value)\n })\n\n if (multiple.value) {\n tags.value.forEach((tag) => {\n tag.hitState = false\n })\n }\n\n filtering.value = true\n suggestions.value = res!\n updatePopperPosition()\n}\n\nconst focusFirstNode = () => {\n let firstNode!: HTMLElement\n\n if (filtering.value && suggestionPanel.value) {\n firstNode = suggestionPanel.value.$el.querySelector(\n `.${nsCascader.e('suggestion-item')}`\n )\n } else {\n firstNode = cascaderPanelRef.value?.$el.querySelector(\n `.${nsCascader.b('node')}[tabindex=\"-1\"]`\n )\n }\n\n if (firstNode) {\n firstNode.focus()\n !filtering.value && firstNode.click()\n }\n}\n\nconst updateStyle = () => {\n const inputInner = inputRef.value?.input\n const tagWrapperEl = tagWrapper.value\n const suggestionPanelEl = suggestionPanel.value?.$el\n\n if (!isClient || !inputInner) return\n\n if (suggestionPanelEl) {\n const suggestionList = suggestionPanelEl.querySelector(\n `.${nsCascader.e('suggestion-list')}`\n )\n suggestionList.style.minWidth = `${inputInner.offsetWidth}px`\n }\n\n if (tagWrapperEl) {\n const { offsetHeight } = tagWrapperEl\n // 2 is el-input__wrapper padding\n const height =\n tags.value.length > 0\n ? `${Math.max(offsetHeight, inputInitialHeight) - 2}px`\n : `${inputInitialHeight}px`\n inputInner.style.height = height\n // if prefix slot exists, update tagWrapperEl left position\n if (slots.prefix) {\n const prefix = inputRef.value?.$el.querySelector(\n `.${nsInput.e('prefix')}`\n ) as HTMLElement\n let left = 0\n if (prefix) {\n left = prefix.offsetWidth\n if (left > 0) {\n left += sizeMapPadding[realSize.value || 'default'] // this is the default padding of el-input__wrapper\n }\n }\n tagWrapperEl.style.left = `${left}px`\n } else {\n tagWrapperEl.style.left = `0`\n }\n updatePopperPosition()\n }\n}\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return cascaderPanelRef.value?.getCheckedNodes(leafOnly)\n}\n\nconst handleExpandChange = (value: CascaderValue) => {\n updatePopperPosition()\n emit('expandChange', value)\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (isComposing.value) return\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n togglePopperVisible()\n break\n case EVENT_CODE.down:\n togglePopperVisible(true)\n nextTick(focusFirstNode)\n e.preventDefault()\n break\n case EVENT_CODE.esc:\n if (popperVisible.value === true) {\n e.preventDefault()\n e.stopPropagation()\n togglePopperVisible(false)\n }\n break\n case EVENT_CODE.tab:\n togglePopperVisible(false)\n break\n }\n}\n\nconst handleClear = () => {\n cascaderPanelRef.value?.clearCheckedNodes()\n if (!popperVisible.value && props.filterable) {\n syncPresentTextValue()\n }\n togglePopperVisible(false)\n emit('clear')\n}\n\nconst syncPresentTextValue = () => {\n const { value } = presentText\n inputValue.value = value\n searchInputValue.value = value\n}\n\nconst handleSuggestionClick = (node: CascaderNode) => {\n const { checked } = node\n\n if (multiple.value) {\n cascaderPanelRef.value?.handleCheckChange(node, !checked, false)\n } else {\n !checked && cascaderPanelRef.value?.handleCheckChange(node, true, false)\n togglePopperVisible(false)\n }\n}\n\nconst handleSuggestionKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(\n target,\n distance,\n `.${nsCascader.e('suggestion-item')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n target.click()\n break\n }\n}\n\nconst handleDelete = () => {\n const lastTag = tags.value[tags.value.length - 1]\n pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1\n\n if (\n !lastTag ||\n !pressDeleteCount ||\n (props.collapseTags && tags.value.length > 1)\n )\n return\n\n if (lastTag.hitState) {\n deleteTag(lastTag)\n } else {\n lastTag.hitState = true\n }\n}\n\nconst debounce = computed(() => props.debounce)\nconst handleFilter = useDebounceFn(() => {\n const { value } = searchKeyword\n\n if (!value) return\n\n const passed = props.beforeFilter(value)\n\n if (isPromise(passed)) {\n passed.then(calculateSuggestions).catch(() => {\n /* prevent log error */\n })\n } else if (passed !== false) {\n calculateSuggestions()\n } else {\n hideSuggestionPanel()\n }\n}, debounce)\n\nconst handleInput = (val: string, e?: InputEvent) => {\n !popperVisible.value && togglePopperVisible(true)\n\n if (e?.isComposing) return\n\n if (val) {\n handleFilter()\n } else {\n const passed = props.beforeFilter('')\n if (isPromise(passed)) {\n passed.catch(() => {\n /* prevent log error */\n })\n }\n hideSuggestionPanel()\n }\n}\n\nconst getInputInnerHeight = (inputInner: HTMLElement): number =>\n Number.parseFloat(\n useCssVar(nsInput.cssVarName('input-height'), inputInner).value!\n ) - 2\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nwatch(filtering, updatePopperPosition)\n\nwatch(\n [\n checkedNodes,\n isDisabled,\n () => props.collapseTags,\n () => props.maxCollapseTags,\n ],\n calculatePresentTags\n)\n\nwatch(tags, () => {\n nextTick(() => updateStyle())\n})\n\nwatch(realSize, async () => {\n await nextTick()\n const inputInner = inputRef.value!.input!\n inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight\n updateStyle()\n})\n\nwatch(presentText, syncPresentTextValue, { immediate: true })\n\nwatch(\n () => popperVisible.value,\n (val) => {\n if (val && props.props.lazy && props.props.lazyLoad) {\n cascaderPanelRef.value?.loadLazyRootNodes()\n }\n }\n)\n\nonMounted(() => {\n const inputInner = inputRef.value!.input!\n\n const inputInnerHeight = getInputInnerHeight(inputInner)\n\n inputInitialHeight = inputInner.offsetHeight || inputInnerHeight\n useResizeObserver(inputInner, updateStyle)\n})\n\ndefineExpose({\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description cascader panel ref\n */\n cascaderPanelRef,\n /**\n * @description toggle the visible of popper\n */\n togglePopperVisible,\n /**\n * @description cascader content ref\n */\n contentRef,\n /**\n * @description selected content text\n */\n presentText,\n /** @description focus the input element */\n focus,\n /** @description blur the input element */\n blur,\n})\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cascader.vue_vue_type_script_setup_true_lang.js","names":["$slots","$nextTick"],"sources":["../../../../../../packages/components/cascader/src/cascader.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"tooltipRef\"\n :visible=\"popperVisible\"\n :popper-class=\"[nsCascader.e('dropdown'), popperClass!]\"\n :popper-style=\"popperStyle\"\n :stop-popper-mouse-event=\"false\"\n :gpu-acceleration=\"false\"\n :show-arrow=\"false\"\n :transition=\"`${nsCascader.namespace.value}-fade-in-linear`\"\n pure\n teleported\n :persistent=\"persistent\"\n @hide=\"hideSuggestionPanel\"\n >\n <template #default>\n <div\n ref=\"wrapperRef\"\n v-clickoutside:[contentRef]=\"handleClickOutside\"\n :class=\"cascaderKls\"\n :style=\"cascaderStyle\"\n @click=\"() => togglePopperVisible(readonly ? undefined : true)\"\n @keydown=\"handleKeyDown\"\n @mouseenter=\"inputHover = true\"\n @mouseleave=\"inputHover = false\"\n >\n <el-input\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :placeholder=\"currentPlaceholder\"\n :readonly=\"readonly\"\n :disabled=\"isDisabled\"\n :validate-event=\"false\"\n :size=\"realSize\"\n :class=\"inputClass\"\n :tabindex=\"multiple && filterable && !isDisabled ? -1 : undefined\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n @input=\"handleInput\"\n >\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearBtnVisible\"\n key=\"clear\"\n :class=\"[nsInput.e('icon'), 'icon-circle-close']\"\n @click.stop=\"handleClear\"\n >\n <el-icon-content :icon=\"clearIcon\" />\n </el-icon>\n <el-icon\n v-else\n key=\"arrow-down\"\n :class=\"cascaderIconKls\"\n @click.stop=\"togglePopperVisible()\"\n >\n <arrow-down />\n </el-icon>\n </template>\n </el-input>\n\n <div\n v-if=\"multiple\"\n ref=\"tagWrapper\"\n :class=\"[\n nsCascader.e('tags'),\n nsCascader.is('validate', Boolean(validateState)),\n ]\"\n >\n <slot name=\"tag\" :data=\"tags\" :delete-tag=\"deleteTag\">\n <el-tag\n v-for=\"tag in showTagList\"\n :key=\"tag.key\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </slot>\n <el-tooltip\n v-if=\"collapseTags && tags.length > maxCollapseTags\"\n ref=\"tagTooltipRef\"\n :disabled=\"popperVisible || !collapseTagsTooltip\"\n trigger=\"click\"\n :popper-class=\"popperClass\"\n :popper-style=\"popperStyle\"\n effect=\"light\"\n :persistent=\"persistent\"\n >\n <template #default>\n <el-tag\n :closable=\"false\"\n :size=\"tagSize\"\n :type=\"tagType\"\n :effect=\"tagEffect\"\n disable-transitions\n >\n <span :class=\"nsCascader.e('tags-text')\">\n + {{ tags.length - maxCollapseTags }}\n </span>\n </el-tag>\n </template>\n <template #content>\n <el-scrollbar :max-height=\"maxCollapseTagsTooltipHeight\">\n <div :class=\"nsCascader.e('collapse-tags')\">\n <div\n v-for=\"(tag, idx) in collapseTagList\"\n :key=\"idx\"\n :class=\"nsCascader.e('collapse-tag')\"\n >\n <el-tag\n :key=\"tag.key\"\n class=\"in-tooltip\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </div>\n </div>\n </el-scrollbar>\n </template>\n </el-tooltip>\n <input\n v-if=\"filterable && !isDisabled\"\n v-model=\"searchInputValue\"\n type=\"text\"\n :class=\"nsCascader.e('search-input')\"\n :placeholder=\"presentText ? '' : inputPlaceholder\"\n @input=\"(e) => handleInput(searchInputValue, e as InputEvent)\"\n @click.stop=\"togglePopperVisible(true)\"\n @keydown.delete=\"handleDelete\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n />\n </div>\n </div>\n </template>\n\n <template #content>\n <div v-if=\"$slots.header\" :class=\"nsCascader.e('header')\" @click.stop>\n <slot name=\"header\" />\n </div>\n <el-cascader-panel\n v-show=\"!filtering\"\n ref=\"cascaderPanelRef\"\n v-model=\"checkedValue\"\n :options=\"options\"\n :props=\"panelProps\"\n :border=\"false\"\n :render-label=\"$slots.default\"\n @expand-change=\"handleExpandChange\"\n @close=\"$nextTick(() => togglePopperVisible(false))\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-panel>\n <el-scrollbar\n v-if=\"filterable\"\n v-show=\"filtering\"\n ref=\"suggestionPanel\"\n tag=\"ul\"\n :class=\"nsCascader.e('suggestion-panel')\"\n :view-class=\"nsCascader.e('suggestion-list')\"\n @keydown=\"handleSuggestionKeyDown\"\n >\n <template v-if=\"suggestions.length\">\n <li\n v-for=\"item in suggestions\"\n :key=\"item.uid\"\n :class=\"[\n nsCascader.e('suggestion-item'),\n nsCascader.is('checked', item.checked),\n ]\"\n :tabindex=\"-1\"\n @click=\"handleSuggestionClick(item)\"\n >\n <slot name=\"suggestion-item\" :item=\"item\">\n <span>{{ item.text }}</span>\n <el-icon v-if=\"item.checked\">\n <check />\n </el-icon>\n </slot>\n </li>\n </template>\n <slot v-else name=\"empty\">\n <li :class=\"nsCascader.e('empty-text')\">\n {{ t('el.cascader.noMatch') }}\n </li>\n </slot>\n </el-scrollbar>\n <div v-if=\"$slots.footer\" :class=\"nsCascader.e('footer')\" @click.stop>\n <slot name=\"footer\" />\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n markRaw,\n nextTick,\n onMounted,\n ref,\n useAttrs,\n watch,\n} from 'vue'\nimport { cloneDeep } from 'lodash-unified'\nimport { useCssVar, useDebounceFn, useResizeObserver } from '@vueuse/core'\nimport {\n ArrowDown,\n Check,\n CircleClose,\n debugWarn,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isPromise,\n} from '@element-plus/utils'\nimport ElCascaderPanel from '@element-plus/components/cascader-panel'\nimport ElInput from '@element-plus/components/input'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTag from '@element-plus/components/tag'\nimport ElIcon from '@element-plus/components/icon'\nimport ElIconContent from '@element-plus/components/icon/src/icon-content.vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport { ClickOutside as vClickoutside } from '@element-plus/directives'\nimport {\n useComposition,\n useEmptyValues,\n useFocusController,\n useLocale,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { cascaderEmits } from './cascader'\n\nimport type { ComputedRef, StyleValue } from 'vue'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { ScrollbarInstance } from '@element-plus/components/scrollbar'\nimport type {\n CascaderNode,\n CascaderPanelInstance,\n CascaderProps as CascaderPanelProps,\n CascaderValue,\n Tag,\n} from '@element-plus/components/cascader-panel'\nimport type { CascaderComponentProps } from './cascader'\n\ndefineOptions({\n name: 'ElCascader',\n})\n\nconst props = withDefaults(defineProps<CascaderComponentProps>(), {\n options: () => [],\n props: () => ({}),\n disabled: undefined,\n clearIcon: markRaw(CircleClose),\n filterMethod: (node, keyword) => node.text.includes(keyword),\n separator: ' / ',\n showAllLevels: true,\n maxCollapseTags: 1,\n debounce: 300,\n beforeFilter: () => true,\n tagType: 'info',\n tagEffect: 'light',\n validateEvent: true,\n persistent: true,\n showCheckedStrategy: 'child',\n showPrefix: true,\n popperStyle: undefined,\n valueOnClear: undefined,\n})\nconst emit = defineEmits(cascaderEmits)\nconst attrs = useAttrs()\nconst slots = defineSlots()\n\nlet inputInitialHeight = 0\nlet pressDeleteCount = 0\n\nconst nsCascader = useNamespace('cascader')\nconst nsInput = useNamespace('input')\nconst sizeMapPadding = {\n small: 7,\n default: 11,\n large: 15,\n}\n\nconst { t } = useLocale()\nconst { formItem } = useFormItem()\nconst isDisabled = useFormDisabled()\nconst { valueOnClear } = useEmptyValues(props)\nconst { isComposing, handleComposition } = useComposition({\n afterComposition(event) {\n const text = (event.target as HTMLInputElement)?.value\n handleInput(text)\n },\n})\n\nconst tooltipRef = ref<TooltipInstance>()\nconst tagTooltipRef = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst tagWrapper = ref<HTMLDivElement>()\nconst cascaderPanelRef = ref<CascaderPanelInstance>()\nconst suggestionPanel = ref<ScrollbarInstance>()\nconst popperVisible = ref(false)\nconst inputHover = ref(false)\nconst filtering = ref(false)\nconst inputValue = ref('')\nconst searchInputValue = ref('')\nconst tags = ref<Tag[]>([])\nconst suggestions = ref<CascaderNode[]>([])\n\nconst showTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags\n ? tags.value.slice(0, props.maxCollapseTags)\n : tags.value\n})\n\nconst collapseTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags ? tags.value.slice(props.maxCollapseTags) : []\n})\n\nconst cascaderStyle = computed(() => {\n return attrs.style as StyleValue\n})\n\nconst inputPlaceholder = computed(\n () => props.placeholder ?? t('el.cascader.placeholder')\n)\nconst currentPlaceholder = computed(() =>\n searchInputValue.value || tags.value.length > 0 || isComposing.value\n ? ''\n : inputPlaceholder.value\n)\nconst realSize = useFormSize()\nconst tagSize = computed(() =>\n realSize.value === 'small' ? 'small' : 'default'\n)\nconst multiple = computed(() => !!props.props.multiple)\nconst readonly = computed(() => !props.filterable || multiple.value)\nconst panelProps = computed<CascaderPanelProps>(() => ({\n ...props.props,\n expandTrigger: 'click',\n hoverThreshold: 0,\n}))\nconst searchKeyword = computed(() =>\n multiple.value ? searchInputValue.value : inputValue.value\n)\nconst checkedNodes: ComputedRef<CascaderNode[]> = computed(\n () => cascaderPanelRef.value?.checkedNodes || []\n)\n\nconst { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {\n disabled: isDisabled,\n beforeBlur(event) {\n return (\n tooltipRef.value?.isFocusInsideContent(event) ||\n tagTooltipRef.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst clearBtnVisible = computed(() => {\n if (\n !props.clearable ||\n isDisabled.value ||\n filtering.value ||\n (!inputHover.value && !isFocused.value)\n )\n return false\n\n return !!checkedNodes.value.length\n})\nconst presentText = computed(() => {\n const { showAllLevels, separator } = props\n const nodes = checkedNodes.value\n return nodes.length\n ? multiple.value\n ? ''\n : nodes[0].calcText(showAllLevels, separator)\n : ''\n})\n\nconst validateState = computed(() => formItem?.validateState || '')\n\nconst checkedValue = computed<CascaderValue>({\n get() {\n return cloneDeep(props.modelValue) as CascaderValue\n },\n set(val) {\n // https://github.com/element-plus/element-plus/issues/17647\n const value = val ?? valueOnClear.value\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n if (props.validateEvent) {\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst cascaderKls = computed(() => {\n return [\n nsCascader.b(),\n nsCascader.m(realSize.value),\n nsCascader.is('disabled', isDisabled.value),\n attrs.class,\n ]\n})\n\nconst cascaderIconKls = computed(() => {\n return [\n nsInput.e('icon'),\n 'icon-arrow-down',\n nsCascader.is('reverse', popperVisible.value),\n ]\n})\n\nconst inputClass = computed(() => nsCascader.is('focus', isFocused.value))\n\nconst contentRef = computed(() => {\n return tooltipRef.value?.popperRef?.contentRef\n})\n\nconst handleClickOutside = (event: Event) => {\n if (isFocused.value) {\n const _event = new FocusEvent('blur', event)\n handleBlur(_event)\n }\n togglePopperVisible(false)\n}\n\nconst togglePopperVisible = (visible?: boolean) => {\n if (isDisabled.value) return\n\n visible = visible ?? !popperVisible.value\n\n if (visible !== popperVisible.value) {\n popperVisible.value = visible\n inputRef.value?.input?.setAttribute('aria-expanded', `${visible}`)\n\n if (visible) {\n updatePopperPosition()\n cascaderPanelRef.value &&\n nextTick(cascaderPanelRef.value.scrollToExpandingNode)\n } else if (props.filterable) {\n syncPresentTextValue()\n }\n\n emit('visibleChange', visible)\n }\n}\n\nconst updatePopperPosition = () => {\n nextTick(() => {\n tooltipRef.value?.updatePopper()\n })\n}\nconst hideSuggestionPanel = () => {\n filtering.value = false\n}\n\nconst genTag = (node: CascaderNode): Tag => {\n const { showAllLevels, separator } = props\n return {\n node,\n key: node.uid,\n text: node.calcText(showAllLevels, separator),\n hitState: false,\n closable: !isDisabled.value && !node.isDisabled,\n }\n}\n\nconst deleteTag = (tag: Tag) => {\n const node = tag.node as CascaderNode\n node.doCheck(false)\n cascaderPanelRef.value?.calculateCheckedValue()\n emit('removeTag', node.valueByOption)\n}\n\nconst getStrategyCheckedNodes = (): CascaderNode[] => {\n switch (props.showCheckedStrategy) {\n case 'child':\n return checkedNodes.value\n case 'parent': {\n const clickedNodes = getCheckedNodes(false)\n const clickedNodesValue = clickedNodes!.map((o) => o.value)\n const parentNodes = clickedNodes!.filter(\n (o) => !o.parent || !clickedNodesValue.includes(o.parent.value)\n )\n return parentNodes\n }\n default:\n return []\n }\n}\n\nconst calculatePresentTags = () => {\n if (!multiple.value) return\n\n const nodes = getStrategyCheckedNodes()\n\n const allTags: Tag[] = []\n nodes.forEach((node) => allTags.push(genTag(node)))\n tags.value = allTags\n}\n\nconst calculateSuggestions = () => {\n const { filterMethod, showAllLevels, separator } = props\n const res = cascaderPanelRef.value\n ?.getFlattedNodes(!props.props.checkStrictly)\n ?.filter((node) => {\n if (node.isDisabled) return false\n node.calcText(showAllLevels, separator)\n return filterMethod(node, searchKeyword.value)\n })\n\n if (multiple.value) {\n tags.value.forEach((tag) => {\n tag.hitState = false\n })\n }\n\n filtering.value = true\n suggestions.value = res!\n updatePopperPosition()\n}\n\nconst focusFirstNode = () => {\n let firstNode!: HTMLElement\n\n if (filtering.value && suggestionPanel.value) {\n firstNode = suggestionPanel.value.$el.querySelector(\n `.${nsCascader.e('suggestion-item')}`\n )\n } else {\n firstNode = cascaderPanelRef.value?.$el.querySelector(\n `.${nsCascader.b('node')}[tabindex=\"-1\"]`\n )\n }\n\n if (firstNode) {\n firstNode.focus()\n !filtering.value && firstNode.click()\n }\n}\n\nconst updateStyle = () => {\n const inputInner = inputRef.value?.input\n const tagWrapperEl = tagWrapper.value\n const suggestionPanelEl = suggestionPanel.value?.$el\n\n if (!isClient || !inputInner) return\n\n if (suggestionPanelEl) {\n const suggestionList = suggestionPanelEl.querySelector(\n `.${nsCascader.e('suggestion-list')}`\n )\n suggestionList.style.minWidth = `${inputInner.offsetWidth}px`\n }\n\n if (tagWrapperEl) {\n const { offsetHeight } = tagWrapperEl\n // 2 is el-input__wrapper padding\n const height =\n tags.value.length > 0\n ? `${Math.max(offsetHeight, inputInitialHeight) - 2}px`\n : `${inputInitialHeight}px`\n inputInner.style.height = height\n // if prefix slot exists, update tagWrapperEl left position\n if (slots.prefix) {\n const prefix = inputRef.value?.$el.querySelector(\n `.${nsInput.e('prefix')}`\n ) as HTMLElement\n let left = 0\n if (prefix) {\n left = prefix.offsetWidth\n if (left > 0) {\n left += sizeMapPadding[realSize.value || 'default'] // this is the default padding of el-input__wrapper\n }\n }\n tagWrapperEl.style.left = `${left}px`\n } else {\n tagWrapperEl.style.left = `0`\n }\n updatePopperPosition()\n }\n}\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return cascaderPanelRef.value?.getCheckedNodes(leafOnly)\n}\n\nconst handleExpandChange = (value: CascaderValue) => {\n updatePopperPosition()\n emit('expandChange', value)\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (isComposing.value) return\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n togglePopperVisible()\n break\n case EVENT_CODE.down:\n togglePopperVisible(true)\n nextTick(focusFirstNode)\n e.preventDefault()\n break\n case EVENT_CODE.esc:\n if (popperVisible.value === true) {\n e.preventDefault()\n e.stopPropagation()\n togglePopperVisible(false)\n }\n break\n case EVENT_CODE.tab:\n togglePopperVisible(false)\n break\n }\n}\n\nconst handleClear = () => {\n cascaderPanelRef.value?.clearCheckedNodes()\n if (!popperVisible.value && props.filterable) {\n syncPresentTextValue()\n }\n togglePopperVisible(false)\n emit('clear')\n}\n\nconst syncPresentTextValue = () => {\n const { value } = presentText\n inputValue.value = value\n searchInputValue.value = value\n}\n\nconst handleSuggestionClick = (node: CascaderNode) => {\n const { checked } = node\n\n if (multiple.value) {\n cascaderPanelRef.value?.handleCheckChange(node, !checked, false)\n } else {\n !checked && cascaderPanelRef.value?.handleCheckChange(node, true, false)\n togglePopperVisible(false)\n }\n}\n\nconst handleSuggestionKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(\n target,\n distance,\n `.${nsCascader.e('suggestion-item')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n target.click()\n break\n }\n}\n\nconst handleDelete = () => {\n const lastTag = tags.value[tags.value.length - 1]\n pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1\n\n if (\n !lastTag ||\n !pressDeleteCount ||\n (props.collapseTags && tags.value.length > 1)\n )\n return\n\n if (lastTag.hitState) {\n deleteTag(lastTag)\n } else {\n lastTag.hitState = true\n }\n}\n\nconst debounce = computed(() => props.debounce)\nconst handleFilter = useDebounceFn(() => {\n const { value } = searchKeyword\n\n if (!value) return\n\n const passed = props.beforeFilter(value)\n\n if (isPromise(passed)) {\n passed.then(calculateSuggestions).catch(() => {\n /* prevent log error */\n })\n } else if (passed !== false) {\n calculateSuggestions()\n } else {\n hideSuggestionPanel()\n }\n}, debounce)\n\nconst handleInput = (val: string, e?: InputEvent) => {\n !popperVisible.value && togglePopperVisible(true)\n\n if (e?.isComposing) return\n\n if (val) {\n handleFilter()\n } else {\n const passed = props.beforeFilter('')\n if (isPromise(passed)) {\n passed.catch(() => {\n /* prevent log error */\n })\n }\n hideSuggestionPanel()\n }\n}\n\nconst getInputInnerHeight = (inputInner: HTMLElement): number =>\n Number.parseFloat(\n useCssVar(nsInput.cssVarName('input-height'), inputInner).value!\n ) - 2\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nwatch(filtering, updatePopperPosition)\n\nwatch(\n [\n checkedNodes,\n isDisabled,\n () => props.collapseTags,\n () => props.maxCollapseTags,\n ],\n calculatePresentTags\n)\n\nwatch(tags, () => {\n nextTick(() => updateStyle())\n})\n\nwatch(realSize, async () => {\n await nextTick()\n const inputInner = inputRef.value!.input!\n inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight\n updateStyle()\n})\n\nwatch(presentText, syncPresentTextValue, { immediate: true })\n\nwatch(\n () => popperVisible.value,\n (val) => {\n if (val && props.props.lazy && props.props.lazyLoad) {\n cascaderPanelRef.value?.loadLazyRootNodes()\n }\n }\n)\n\nonMounted(() => {\n const inputInner = inputRef.value!.input!\n\n const inputInnerHeight = getInputInnerHeight(inputInner)\n\n inputInitialHeight = inputInner.offsetHeight || inputInnerHeight\n useResizeObserver(inputInner, updateStyle)\n})\n\ndefineExpose({\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description cascader panel ref\n */\n cascaderPanelRef,\n /**\n * @description toggle the visible of popper\n */\n togglePopperVisible,\n /**\n * @description cascader content ref\n */\n contentRef,\n /**\n * @description selected content text\n */\n presentText,\n /** @description focus the input element */\n focus,\n /** @description blur the input element */\n blur,\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwRA,MAAM,QAAQ;EAoBd,MAAM,OAAO;EACb,MAAM,2BAAiB;EACvB,MAAM,2BAAQ;EAEd,IAAI,qBAAqB;EACzB,IAAI,mBAAmB;EAEvB,MAAM,aAAa,6BAAa,WAAU;EAC1C,MAAM,UAAU,6BAAa,QAAO;EACpC,MAAM,iBAAiB;GACrB,OAAO;GACP,SAAS;GACT,OAAO;GACT;EAEA,MAAM,EAAE,MAAM,yBAAU;EACxB,MAAM,EAAE,aAAa,mCAAY;EACjC,MAAM,aAAa,+CAAgB;EACnC,MAAM,EAAE,iBAAiB,+BAAe,MAAK;EAC7C,MAAM,EAAE,aAAa,sBAAsB,+BAAe,EACxD,iBAAiB,OAAO;GACtB,MAAM,OAAQ,MAAM,QAA6B;AACjD,eAAY,KAAI;KAEnB,CAAA;EAED,MAAM,2BAAkC;EACxC,MAAM,8BAAqC;EAC3C,MAAM,yBAA8B;EACpC,MAAM,2BAAiC;EACvC,MAAM,iCAA8C;EACpD,MAAM,gCAAyC;EAC/C,MAAM,6BAAoB,MAAK;EAC/B,MAAM,0BAAiB,MAAK;EAC5B,MAAM,yBAAgB,MAAK;EAC3B,MAAM,0BAAiB,GAAE;EACzB,MAAM,gCAAuB,GAAE;EAC/B,MAAM,oBAAkB,EAAE,CAAA;EAC1B,MAAM,2BAAkC,EAAE,CAAA;EAE1C,MAAM,sCAA6B;AACjC,OAAI,CAAC,MAAM,MAAM,SACf,QAAO,EAAC;AAEV,UAAO,MAAM,eACT,KAAK,MAAM,MAAM,GAAG,MAAM,gBAAe,GACzC,KAAK;IACV;EAED,MAAM,0CAAiC;AACrC,OAAI,CAAC,MAAM,MAAM,SACf,QAAO,EAAC;AAEV,UAAO,MAAM,eAAe,KAAK,MAAM,MAAM,MAAM,gBAAgB,GAAG,EAAC;IACxE;EAED,MAAM,wCAA+B;AACnC,UAAO,MAAM;IACd;EAED,MAAM,2CACE,MAAM,eAAe,EAAE,0BAAyB,CACxD;EACA,MAAM,6CACJ,iBAAiB,SAAS,KAAK,MAAM,SAAS,KAAK,YAAY,QAC3D,KACA,iBAAiB,MACvB;EACA,MAAM,WAAW,2CAAY;EAC7B,MAAM,kCACJ,SAAS,UAAU,UAAU,UAAU,UACzC;EACA,MAAM,mCAA0B,CAAC,CAAC,MAAM,MAAM,SAAQ;EACtD,MAAM,mCAA0B,CAAC,MAAM,cAAc,SAAS,MAAK;EACnE,MAAM,sCAAiD;GACrD,GAAG,MAAM;GACT,eAAe;GACf,gBAAgB;GACjB,EAAC;EACF,MAAM,wCACJ,SAAS,QAAQ,iBAAiB,QAAQ,WAAW,MACvD;EACA,MAAM,uCACE,iBAAiB,OAAO,gBAAgB,EAAC,CACjD;EAEA,MAAM,EAAE,YAAY,WAAW,eAAe,mCAAmB,UAAU;GACzE,UAAU;GACV,WAAW,OAAO;AAChB,WACE,WAAW,OAAO,qBAAqB,MAAM,IAC7C,cAAc,OAAO,qBAAqB,MAAK;;GAGnD,YAAY;AACV,QAAI,MAAM,cACR,WAAU,WAAW,OAAO,CAAC,OAAO,QAAQ,wBAAU,IAAI,CAAA;;GAG/D,CAAA;EAED,MAAM,0CAAiC;AACrC,OACE,CAAC,MAAM,aACP,WAAW,SACX,UAAU,SACT,CAAC,WAAW,SAAS,CAAC,UAAU,MAEjC,QAAO;AAET,UAAO,CAAC,CAAC,aAAa,MAAM;IAC7B;EACD,MAAM,sCAA6B;GACjC,MAAM,EAAE,eAAe,cAAc;GACrC,MAAM,QAAQ,aAAa;AAC3B,UAAO,MAAM,SACT,SAAS,QACP,KACA,MAAM,GAAG,SAAS,eAAe,UAAS,GAC5C;IACL;EAED,MAAM,wCAA+B,UAAU,iBAAiB,GAAE;EAElE,MAAM,iCAAuC;GAC3C,MAAM;AACJ,yCAAiB,MAAM,WAAW;;GAEpC,IAAI,KAAK;IAEP,MAAM,QAAQ,OAAO,aAAa;AAClC,SAAK,kCAAoB,MAAK;AAC9B,SAAK,4BAAc,MAAK;AACxB,QAAI,MAAM,cACR,WAAU,SAAS,SAAS,CAAC,OAAO,QAAQ,wBAAU,IAAI,CAAA;;GAG/D,CAAA;EAED,MAAM,sCAA6B;AACjC,UAAO;IACL,WAAW,GAAG;IACd,WAAW,EAAE,SAAS,MAAM;IAC5B,WAAW,GAAG,YAAY,WAAW,MAAM;IAC3C,MAAM;IACR;IACD;EAED,MAAM,0CAAiC;AACrC,UAAO;IACL,QAAQ,EAAE,OAAO;IACjB;IACA,WAAW,GAAG,WAAW,cAAc,MAAM;IAC/C;IACD;EAED,MAAM,qCAA4B,WAAW,GAAG,SAAS,UAAU,MAAM,CAAA;EAEzE,MAAM,qCAA4B;AAChC,UAAO,WAAW,OAAO,WAAW;IACrC;EAED,MAAM,sBAAsB,UAAiB;AAC3C,OAAI,UAAU,MAEZ,YADe,IAAI,WAAW,QAAQ,MAAK,CAC1B;AAEnB,uBAAoB,MAAK;;EAG3B,MAAM,uBAAuB,YAAsB;AACjD,OAAI,WAAW,MAAO;AAEtB,aAAU,WAAW,CAAC,cAAc;AAEpC,OAAI,YAAY,cAAc,OAAO;AACnC,kBAAc,QAAQ;AACtB,aAAS,OAAO,OAAO,aAAa,iBAAiB,GAAG,UAAS;AAEjE,QAAI,SAAS;AACX,2BAAqB;AACrB,sBAAiB,2BACN,iBAAiB,MAAM,sBAAqB;eAC9C,MAAM,WACf,uBAAqB;AAGvB,SAAK,iBAAiB,QAAO;;;EAIjC,MAAM,6BAA6B;AACjC,2BAAe;AACb,eAAW,OAAO,cAAa;KAChC;;EAEH,MAAM,4BAA4B;AAChC,aAAU,QAAQ;;EAGpB,MAAM,UAAU,SAA4B;GAC1C,MAAM,EAAE,eAAe,cAAc;AACrC,UAAO;IACL;IACA,KAAK,KAAK;IACV,MAAM,KAAK,SAAS,eAAe,UAAU;IAC7C,UAAU;IACV,UAAU,CAAC,WAAW,SAAS,CAAC,KAAK;IACvC;;EAGF,MAAM,aAAa,QAAa;GAC9B,MAAM,OAAO,IAAI;AACjB,QAAK,QAAQ,MAAK;AAClB,oBAAiB,OAAO,uBAAsB;AAC9C,QAAK,aAAa,KAAK,cAAa;;EAGtC,MAAM,gCAAgD;AACpD,WAAQ,MAAM,qBAAd;IACE,KAAK,QACH,QAAO,aAAa;IACtB,KAAK,UAAU;KACb,MAAM,eAAe,gBAAgB,MAAK;KAC1C,MAAM,oBAAoB,aAAc,KAAK,MAAM,EAAE,MAAK;AAI1D,YAHoB,aAAc,QAC/B,MAAM,CAAC,EAAE,UAAU,CAAC,kBAAkB,SAAS,EAAE,OAAO,MAAK,CAChE;;IAGF,QACE,QAAO,EAAC;;;EAId,MAAM,6BAA6B;AACjC,OAAI,CAAC,SAAS,MAAO;GAErB,MAAM,QAAQ,yBAAwB;GAEtC,MAAM,UAAiB,EAAC;AACxB,SAAM,SAAS,SAAS,QAAQ,KAAK,OAAO,KAAK,CAAC,CAAA;AAClD,QAAK,QAAQ;;EAGf,MAAM,6BAA6B;GACjC,MAAM,EAAE,cAAc,eAAe,cAAc;GACnD,MAAM,MAAM,iBAAiB,OACzB,gBAAgB,CAAC,MAAM,MAAM,cAAa,EAC1C,QAAQ,SAAS;AACjB,QAAI,KAAK,WAAY,QAAO;AAC5B,SAAK,SAAS,eAAe,UAAS;AACtC,WAAO,aAAa,MAAM,cAAc,MAAK;KAC9C;AAEH,OAAI,SAAS,MACX,MAAK,MAAM,SAAS,QAAQ;AAC1B,QAAI,WAAW;KAChB;AAGH,aAAU,QAAQ;AAClB,eAAY,QAAQ;AACpB,yBAAqB;;EAGvB,MAAM,uBAAuB;GAC3B,IAAI;AAEJ,OAAI,UAAU,SAAS,gBAAgB,MACrC,aAAY,gBAAgB,MAAM,IAAI,cACpC,IAAI,WAAW,EAAE,kBAAkB,GACrC;OAEA,aAAY,iBAAiB,OAAO,IAAI,cACtC,IAAI,WAAW,EAAE,OAAO,CAAC,iBAC3B;AAGF,OAAI,WAAW;AACb,cAAU,OAAM;AAChB,KAAC,UAAU,SAAS,UAAU,OAAM;;;EAIxC,MAAM,oBAAoB;GACxB,MAAM,aAAa,SAAS,OAAO;GACnC,MAAM,eAAe,WAAW;GAChC,MAAM,oBAAoB,gBAAgB,OAAO;AAEjD,OAAI,CAAC,yBAAY,CAAC,WAAY;AAE9B,OAAI,mBAAmB;IACrB,MAAM,iBAAiB,kBAAkB,cACvC,IAAI,WAAW,EAAE,kBAAkB,GACrC;AACA,mBAAe,MAAM,WAAW,GAAG,WAAW,YAAY;;AAG5D,OAAI,cAAc;IAChB,MAAM,EAAE,iBAAiB;IAEzB,MAAM,SACJ,KAAK,MAAM,SAAS,IAChB,GAAG,KAAK,IAAI,cAAc,mBAAmB,GAAG,EAAE,MAClD,GAAG,mBAAmB;AAC5B,eAAW,MAAM,SAAS;AAE1B,QAAI,MAAM,QAAQ;KAChB,MAAM,SAAS,SAAS,OAAO,IAAI,cACjC,IAAI,QAAQ,EAAE,SAAS,GACxB;KACD,IAAI,OAAO;AACX,SAAI,QAAQ;AACV,aAAO,OAAO;AACd,UAAI,OAAO,EACT,SAAQ,eAAe,SAAS,SAAS;;AAG7C,kBAAa,MAAM,OAAO,GAAG,KAAK;UAElC,cAAa,MAAM,OAAO;AAE5B,0BAAqB;;;EAIzB,MAAM,mBAAmB,aAAsB;AAC7C,UAAO,iBAAiB,OAAO,gBAAgB,SAAQ;;EAGzD,MAAM,sBAAsB,UAAyB;AACnD,yBAAqB;AACrB,QAAK,gBAAgB,MAAK;;EAG5B,MAAM,iBAAiB,MAAqB;AAC1C,OAAI,YAAY,MAAO;AAGvB,WAFa,6BAAa,EAAC,EAE3B;IACE,KAAK,0BAAW;IAChB,KAAK,0BAAW;AACd,0BAAoB;AACpB;IACF,KAAK,0BAAW;AACd,yBAAoB,KAAI;AACxB,uBAAS,eAAc;AACvB,OAAE,gBAAe;AACjB;IACF,KAAK,0BAAW;AACd,SAAI,cAAc,UAAU,MAAM;AAChC,QAAE,gBAAe;AACjB,QAAE,iBAAgB;AAClB,0BAAoB,MAAK;;AAE3B;IACF,KAAK,0BAAW;AACd,yBAAoB,MAAK;AACzB;;;EAIN,MAAM,oBAAoB;AACxB,oBAAiB,OAAO,mBAAkB;AAC1C,OAAI,CAAC,cAAc,SAAS,MAAM,WAChC,uBAAqB;AAEvB,uBAAoB,MAAK;AACzB,QAAK,QAAO;;EAGd,MAAM,6BAA6B;GACjC,MAAM,EAAE,UAAU;AAClB,cAAW,QAAQ;AACnB,oBAAiB,QAAQ;;EAG3B,MAAM,yBAAyB,SAAuB;GACpD,MAAM,EAAE,YAAY;AAEpB,OAAI,SAAS,MACX,kBAAiB,OAAO,kBAAkB,MAAM,CAAC,SAAS,MAAK;QAC1D;AACL,KAAC,WAAW,iBAAiB,OAAO,kBAAkB,MAAM,MAAM,MAAK;AACvE,wBAAoB,MAAK;;;EAI7B,MAAM,2BAA2B,MAAqB;GACpD,MAAM,SAAS,EAAE;GACjB,MAAM,OAAO,6BAAa,EAAC;AAE3B,WAAQ,MAAR;IACE,KAAK,0BAAW;IAChB,KAAK,0BAAW;AACd,OAAE,gBAAe;AAEjB,4BACE,wBACE,QAHa,SAAS,0BAAW,KAAK,KAAK,GAK3C,IAAI,WAAW,EAAE,kBAAkB,CAAC,iBACrC,CACH;AACA;IAEF,KAAK,0BAAW;IAChB,KAAK,0BAAW;AACd,YAAO,OAAM;AACb;;;EAIN,MAAM,qBAAqB;GACzB,MAAM,UAAU,KAAK,MAAM,KAAK,MAAM,SAAS;AAC/C,sBAAmB,iBAAiB,QAAQ,IAAI,mBAAmB;AAEnE,OACE,CAAC,WACD,CAAC,oBACA,MAAM,gBAAgB,KAAK,MAAM,SAAS,EAE3C;AAEF,OAAI,QAAQ,SACV,WAAU,QAAO;OAEjB,SAAQ,WAAW;;EAKvB,MAAM,qDAAmC;GACvC,MAAM,EAAE,UAAU;AAElB,OAAI,CAAC,MAAO;GAEZ,MAAM,SAAS,MAAM,aAAa,MAAK;AAEvC,kCAAc,OAAO,CACnB,QAAO,KAAK,qBAAqB,CAAC,YAAY,GAE7C;YACQ,WAAW,MACpB,uBAAqB;OAErB,sBAAoB;6BAfQ,MAAM,SAAQ,CAiBnC;EAEX,MAAM,eAAe,KAAa,MAAmB;AACnD,IAAC,cAAc,SAAS,oBAAoB,KAAI;AAEhD,OAAI,GAAG,YAAa;AAEpB,OAAI,IACF,eAAa;QACR;IACL,MAAM,SAAS,MAAM,aAAa,GAAE;AACpC,mCAAc,OAAO,CACnB,QAAO,YAAY,GAElB;AAEH,yBAAoB;;;EAIxB,MAAM,uBAAuB,eAC3B,OAAO,uCACK,QAAQ,WAAW,eAAe,EAAE,WAAW,CAAC,MAC3D,GAAG;EAEN,MAAM,cAAc;AAClB,YAAS,OAAO,OAAM;;EAGxB,MAAM,aAAa;AACjB,YAAS,OAAO,MAAK;;AAGvB,iBAAM,WAAW,qBAAoB;AAErC,iBACE;GACE;GACA;SACM,MAAM;SACN,MAAM;GACb,EACD,qBACF;AAEA,iBAAM,YAAY;AAChB,2BAAe,aAAa,CAAA;IAC7B;AAED,iBAAM,UAAU,YAAY;AAC1B,4BAAe;GACf,MAAM,aAAa,SAAS,MAAO;AACnC,wBAAqB,oBAAoB,WAAW,IAAI;AACxD,gBAAY;IACb;AAED,iBAAM,aAAa,sBAAsB,EAAE,WAAW,MAAM,CAAA;AAE5D,uBACQ,cAAc,QACnB,QAAQ;AACP,OAAI,OAAO,MAAM,MAAM,QAAQ,MAAM,MAAM,SACzC,kBAAiB,OAAO,mBAAkB;IAGhD;AAEA,2BAAgB;GACd,MAAM,aAAa,SAAS,MAAO;GAEnC,MAAM,mBAAmB,oBAAoB,WAAU;AAEvD,wBAAqB,WAAW,gBAAgB;AAChD,uCAAkB,YAAY,YAAW;IAC1C;AAED,WAAa;GAIX;GAIA;GAIA;GAIA;GAIA;GAEA;GAEA;GACD,CAAA;;oEAhoBc,0BAAA,EAAA;aAhNP;IAAJ,KAAI;IACH,SAAS,cAAA;IACT,gBAAY,gBAAG,WAAU,CAAC,EAAC,WAAA,EAAc,QAAA,YAAW;IACpD,gBAAc,QAAA;IACd,2BAAyB;IACzB,oBAAkB;IAClB,cAAY;IACZ,YAAU,kBAAK,WAAU,CAAC,UAAU,MAAK;IAC1C,MAAA;IACA,YAAA;IACC,YAAY,QAAA;IACZ,QAAM;;IAEI,gCAuIH,4EAAA,OAAA;cArIA;KAAJ,KAAI;KAEH,+BAAO,YAAA,MAAW;KAClB,+BAAO,cAAA,MAAa;KACpB,SAAK,OAAA,OAAA,OAAA,WAAQ,oBAAoB,SAAA,QAAW,SAAS,KAAA;KACrD,WAAS;KACT,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,WAAA,QAAU;KACtB,cAAU,OAAA,QAAA,OAAA,OAAA,WAAE,WAAA,QAAU;4CAsCZ,wBAAA,EAAA;cAnCL;KAAJ,KAAI;iBACK,WAAA;kEAAA,WAAU,QAAA;KAClB,aAAa,mBAAA;KACb,UAAU,SAAA;KACV,yBAAU,WAAU;KACpB,kBAAgB;KAChB,qBAAM,SAAQ;KACd,+BAAO,WAAA,MAAU;KACjB,UAAU,SAAA,SAAY,QAAA,cAAU,gBAAK,WAAU,GAAA,KAAQ;KACvD,mCAAkB,kBAAiB;KACnC,oCAAmB,kBAAiB;KACpC,iCAAgB,kBAAiB;KACjC,SAAO;;KAKG,+BAQC,CANF,gBAAA,mEAME,uBAAA,EAAA;MALR,KAAI;MACH,+BAAK,gBAAG,QAAO,CAAC,EAAC,OAAA,EAAA,oBAAA,CAAA;MACjB,gCAAY,aAAW,CAAA,OAAA,CAAA;;sCAEa,sBAAA,8BAAA,EAAnB,MAAM,QAAA,WAAS,EAAA,MAAA,GAAA,CAAA,OAAA,CAAA;;oFASzB,uBAAA,EAAA;MALR,KAAI;MACH,+BAAO,gBAAA,MAAe;MACtB,SAAK,OAAA,OAAA,OAAA,6BAAA,WAAO,qBAAmB,EAAA,CAAA,OAAA,CAAA;;sCAElB,qCAAA,gCAAA,CAAA;;;;QAlBFA,KAAAA,OAAO;WAAS;gCACR,qBAAA,KAAA,QAAA,SAAA;;;;;;;;;;;;;QAuBlB,SAAA,2DAoFF,OAAA;;cAnFA;KAAJ,KAAI;KACH,+BAAK,gBAAgB,WAAU,CAAC,EAAC,OAAA,iBAAsB,WAAU,CAAC,GAAE,YAAa,QAAQ,cAAA,MAAa,CAAA;;yBAmBhG,KAAA,QAAA,OAAA;MAdW,MAAM,KAAA;MAAmB;cAcpC,wDADI,cAAA,0BAXO,YAAA,QAAP,QAAG;uEAWH,uBAAA,EAAA;OAVN,KAAK,IAAI;OACT,MAAM,QAAA;OACN,MAAM,QAAA;OACN,QAAQ,QAAA;OACR,KAAK,IAAI;OACT,UAAU,IAAI;OACf,uBAAA;OACC,UAAK,WAAE,UAAU,IAAG;;uCAEM,6BAAA,QAAA,+BAAlB,IAAI,KAAI,EAAA,EAAA;;;;;;;;;;;KAIb,QAAA,gBAAgB,KAAA,MAAK,SAAS,QAAA,6EA+CzB,0BAAA,EAAA;;eA9CP;MAAJ,KAAI;MACH,UAAU,cAAA,SAAa,CAAK,QAAA;MAC7B,SAAQ;MACP,gBAAc,QAAA;MACd,gBAAc,QAAA;MACf,QAAO;MACN,YAAY,QAAA;;MAEF,gCAWA,qCAAA,uBAAA,EAAA;OATN,UAAU;OACV,MAAM,QAAA;OACN,MAAM,QAAA;OACN,QAAQ,QAAA;OACT,uBAAA;;uCAIO,6BAAA,QAAA,EAFA,8CAAO,WAAU,CAAC,EAAC,YAAA,CAAA,IAAe,iCAClC,KAAA,MAAK,SAAS,QAAA,gBAAe,EAAA,EAAA;;;;;;;MAI7B,gCAuBM,qCAAA,4BAAA,EAAA,EAtBA,cAAY,QAAA,8BAA4B,EAAA;uCAqB/C,6BAAA,OAAA,EApBA,8CAAO,WAAU,CAAC,EAAC,gBAAA,CAAA,4DAmBjB,cAAA,0BAjBiB,gBAAA,QAAb,KAAK,QAAG;iEAiBZ,OAAA;SAhBH,KAAK;SACL,8CAAO,WAAU,CAAC,EAAC,eAAA,CAAA;uEAcX,uBAAA,EAAA;SAXN,KAAK,IAAI;SACV,OAAM;SACL,MAAM,QAAA;SACN,MAAM,QAAA;SACN,QAAQ,QAAA;SACR,KAAK,IAAI;SACT,UAAU,IAAI;SACf,uBAAA;SACC,UAAK,WAAE,UAAU,IAAG;;yCAEM,6BAAA,QAAA,+BAAlB,IAAI,KAAI,EAAA,EAAA;;;;;;;;;;;;;;;;;;;;KAQrB,QAAA,cAAU,gBAAK,WAAU,8EAW/B,SAAA;;mEAVS,iBAAgB,QAAA;MACzB,MAAK;MACJ,8CAAO,WAAU,CAAC,EAAC,eAAA,CAAA;MACnB,aAAa,YAAA,QAAW,KAAQ,iBAAA;MAChC,SAAK,OAAA,OAAA,OAAA,MAAG,MAAM,YAAY,iBAAA,OAAkB,EAAC;MAC7C,SAAK,OAAA,OAAA,OAAA,6BAAA,WAAO,oBAAmB,KAAA,EAAA,CAAA,OAAA,CAAA;MAC/B,6BAAgB,cAAY,CAAA,SAAA,CAAA;MAC5B,oBAAgB,OAAA,OAAA,OAAA,iCAAE,kBAAA,mBAAA,kBAAA,CAAA,GAAA,KAAiB;MACnC,qBAAiB,OAAA,OAAA,OAAA,iCAAE,kBAAA,mBAAA,kBAAA,CAAA,GAAA,KAAiB;MACpC,kBAAc,OAAA,OAAA,OAAA,iCAAE,kBAAA,mBAAA,kBAAA,CAAA,GAAA,KAAiB;kDATzB,iBAAA,MAAgB;;;KAxHA;KAAd,WAAA;KAAY;IAuIpB,gCAGH;KAFKA,KAAAA,OAAO,4DAEZ,OAAA;;MAFqB,8CAAO,WAAU,CAAC,EAAC,SAAA,CAAA;MAAa,SAAK,OAAA,QAAA,OAAA,mCAAN,IAAW,CAAA,OAAA,CAAA;6BAC7C,KAAA,QAAA,SAAA;iEAgBJ,iCAAA,EAAA;eAZd;MAAJ,KAAI;kBACK,aAAA;qEAAA,aAAY,QAAA;MACpB,SAAS,QAAA;MACT,OAAO,WAAA;MACP,QAAQ;MACR,gBAAcA,KAAAA,OAAO;MACrB,gBAAe;MACf,SAAK,OAAA,QAAA,OAAA,OAAA,WAAEC,KAAAA,gBAAgB,oBAAmB,MAAA,CAAA;;MAEhC,8BACY,qBAAA,KAAA,QAAA,QAAA;;;;;;;uBAXd,UAAA,MAAS;KAeZ,QAAA,gGAgCO,4BAAA,EAAA;;eA9BT;MAAJ,KAAI;MACJ,KAAI;MACH,8CAAO,WAAU,CAAC,EAAC,mBAAA,CAAA;MACnB,6BAAY,WAAU,CAAC,EAAC,kBAAA;MACxB,WAAS;;sCAoBC,CAlBK,YAAA,MAAY,gEAiBrB,cAAA,EAAA,KAAA,GAAA,sBAfY,YAAA,QAAR,SAAI;gEAeR,MAAA;QAdF,KAAK,KAAK;QACV,+BAAK,gBAAkB,WAAU,CAAC,EAAC,kBAAA,iBAAmC,WAAU,CAAC,GAAE,WAAY,KAAK,QAAO;QAI3G,UAAU;QACV,UAAK,WAAE,sBAAsB,KAAI;+BAO3B,KAAA,QAAA,mBAAA,EAL6B,MAAI,QAKjC,6BAJuB,QAAA,+BAAnB,KAAK,KAAI,EAAA,EAAA,EACH,KAAK,qEAEV,uBAAA,EAAA,EAAA,KAAA,GAAA,EAAA;wCADC,qCAAA,4BAAA,CAAA;;;sCASV,KAAA,QAAA,SAAA,EAAA,KAAA,GAAA,QAAA,6BADA,MAAA,EAFA,8CAAO,WAAU,CAAC,EAAC,aAAA,CAAA,4CACnB,EAAC,CAAA,sBAAA,CAAA,EAAA,EAAA;;mDA5BA,UAAA,MAAS;KAgCRD,KAAAA,OAAO,4DAEZ,OAAA;;MAFqB,8CAAO,WAAU,CAAC,EAAC,SAAA,CAAA;MAAa,SAAK,OAAA,QAAA,OAAA,mCAAN,IAAW,CAAA,OAAA,CAAA;6BAC7C,KAAA,QAAA,SAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascader2.js","names":[],"sources":["../../../../../../packages/components/cascader/src/cascader.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"tooltipRef\"\n :visible=\"popperVisible\"\n :teleported=\"teleported\"\n :popper-class=\"[nsCascader.e('dropdown'), popperClass!]\"\n :popper-style=\"popperStyle\"\n :popper-options=\"popperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :stop-popper-mouse-event=\"false\"\n :gpu-acceleration=\"false\"\n :placement=\"placement\"\n :transition=\"`${nsCascader.namespace.value}-zoom-in-top`\"\n :effect=\"effect\"\n pure\n :persistent=\"persistent\"\n @hide=\"hideSuggestionPanel\"\n >\n <template #default>\n <div\n ref=\"wrapperRef\"\n v-clickoutside:[contentRef]=\"handleClickOutside\"\n :class=\"cascaderKls\"\n :style=\"cascaderStyle\"\n @click=\"() => togglePopperVisible(readonly ? undefined : true)\"\n @keydown=\"handleKeyDown\"\n @mouseenter=\"inputHover = true\"\n @mouseleave=\"inputHover = false\"\n >\n <el-input\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :placeholder=\"currentPlaceholder\"\n :readonly=\"readonly\"\n :disabled=\"isDisabled\"\n :validate-event=\"false\"\n :size=\"realSize\"\n :class=\"inputClass\"\n :tabindex=\"multiple && filterable && !isDisabled ? -1 : undefined\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n @input=\"handleInput\"\n >\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearBtnVisible\"\n key=\"clear\"\n :class=\"[nsInput.e('icon'), 'icon-circle-close']\"\n @click.stop=\"handleClear\"\n >\n <el-icon-content :icon=\"clearIcon\" />\n </el-icon>\n <el-icon\n v-else\n key=\"arrow-down\"\n :class=\"cascaderIconKls\"\n @click.stop=\"togglePopperVisible()\"\n >\n <arrow-down />\n </el-icon>\n </template>\n </el-input>\n\n <div\n v-if=\"multiple\"\n ref=\"tagWrapper\"\n :class=\"[\n nsCascader.e('tags'),\n nsCascader.is('validate', Boolean(validateState)),\n ]\"\n >\n <slot name=\"tag\" :data=\"tags\" :delete-tag=\"deleteTag\">\n <el-tag\n v-for=\"tag in showTagList\"\n :key=\"tag.key\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </slot>\n <el-tooltip\n v-if=\"collapseTags && tags.length > maxCollapseTags\"\n ref=\"tagTooltipRef\"\n :disabled=\"popperVisible || !collapseTagsTooltip\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n placement=\"bottom\"\n :popper-class=\"popperClass\"\n :popper-style=\"popperStyle\"\n :effect=\"effect\"\n :persistent=\"persistent\"\n >\n <template #default>\n <el-tag\n :closable=\"false\"\n :size=\"tagSize\"\n :type=\"tagType\"\n :effect=\"tagEffect\"\n disable-transitions\n >\n <span :class=\"nsCascader.e('tags-text')\">\n + {{ tags.length - maxCollapseTags }}\n </span>\n </el-tag>\n </template>\n <template #content>\n <el-scrollbar :max-height=\"maxCollapseTagsTooltipHeight\">\n <div :class=\"nsCascader.e('collapse-tags')\">\n <div\n v-for=\"(tag, idx) in collapseTagList\"\n :key=\"idx\"\n :class=\"nsCascader.e('collapse-tag')\"\n >\n <el-tag\n :key=\"tag.key\"\n class=\"in-tooltip\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </div>\n </div>\n </el-scrollbar>\n </template>\n </el-tooltip>\n <input\n v-if=\"filterable && !isDisabled\"\n v-model=\"searchInputValue\"\n type=\"text\"\n :class=\"nsCascader.e('search-input')\"\n :placeholder=\"presentText ? '' : inputPlaceholder\"\n @input=\"(e) => handleInput(searchInputValue, e as InputEvent)\"\n @click.stop=\"togglePopperVisible(true)\"\n @keydown.delete=\"handleDelete\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n />\n </div>\n </div>\n </template>\n\n <template #content>\n <div v-if=\"$slots.header\" :class=\"nsCascader.e('header')\" @click.stop>\n <slot name=\"header\" />\n </div>\n <el-cascader-panel\n v-show=\"!filtering\"\n ref=\"cascaderPanelRef\"\n v-model=\"checkedValue\"\n :options=\"options\"\n :props=\"props.props\"\n :border=\"false\"\n :render-label=\"$slots.default\"\n @expand-change=\"handleExpandChange\"\n @close=\"$nextTick(() => togglePopperVisible(false))\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-panel>\n <el-scrollbar\n v-if=\"filterable\"\n v-show=\"filtering\"\n ref=\"suggestionPanel\"\n tag=\"ul\"\n :class=\"nsCascader.e('suggestion-panel')\"\n :view-class=\"nsCascader.e('suggestion-list')\"\n @keydown=\"handleSuggestionKeyDown\"\n >\n <template v-if=\"suggestions.length\">\n <li\n v-for=\"item in suggestions\"\n :key=\"item.uid\"\n :class=\"[\n nsCascader.e('suggestion-item'),\n nsCascader.is('checked', item.checked),\n ]\"\n :tabindex=\"-1\"\n @click=\"handleSuggestionClick(item)\"\n >\n <slot name=\"suggestion-item\" :item=\"item\">\n <span>{{ item.text }}</span>\n <el-icon v-if=\"item.checked\">\n <check />\n </el-icon>\n </slot>\n </li>\n </template>\n <slot v-else name=\"empty\">\n <li :class=\"nsCascader.e('empty-text')\">\n {{ t('el.cascader.noMatch') }}\n </li>\n </slot>\n </el-scrollbar>\n <div v-if=\"$slots.footer\" :class=\"nsCascader.e('footer')\" @click.stop>\n <slot name=\"footer\" />\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n markRaw,\n nextTick,\n onMounted,\n ref,\n useAttrs,\n watch,\n} from 'vue'\nimport { cloneDeep } from 'lodash-unified'\nimport { useCssVar, useDebounceFn, useResizeObserver } from '@vueuse/core'\nimport {\n ArrowDown,\n Check,\n CircleClose,\n debugWarn,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isPromise,\n} from '@element-plus/utils'\nimport ElCascaderPanel from '@element-plus/components/cascader-panel'\nimport ElInput from '@element-plus/components/input'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTag from '@element-plus/components/tag'\nimport ElIcon from '@element-plus/components/icon'\nimport ElIconContent from '@element-plus/components/icon/src/icon-content.vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport { ClickOutside as vClickoutside } from '@element-plus/directives'\nimport {\n useComposition,\n useEmptyValues,\n useFocusController,\n useLocale,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { cascaderEmits } from './cascader'\n\nimport type { Options } from '@element-plus/components/popper'\nimport type { ComputedRef, StyleValue } from 'vue'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { ScrollbarInstance } from '@element-plus/components/scrollbar'\nimport type {\n CascaderNode,\n CascaderPanelInstance,\n CascaderValue,\n Tag,\n} from '@element-plus/components/cascader-panel'\nimport type { CascaderComponentProps } from './cascader'\n\nconst popperOptions: Partial<Options> = {\n modifiers: [\n {\n name: 'arrowPosition',\n enabled: true,\n phase: 'main',\n fn: ({ state }) => {\n const { modifiersData, placement } = state\n if (['right', 'left', 'bottom', 'top'].includes(placement)) return\n if (modifiersData.arrow) {\n modifiersData.arrow.x = 35\n }\n },\n requires: ['arrow'],\n },\n ],\n}\n\ndefineOptions({\n name: 'ElCascader',\n})\n\nconst props = withDefaults(defineProps<CascaderComponentProps>(), {\n options: () => [],\n props: () => ({}),\n disabled: undefined,\n clearIcon: markRaw(CircleClose),\n filterMethod: (node, keyword) => node.text.includes(keyword),\n separator: ' / ',\n showAllLevels: true,\n maxCollapseTags: 1,\n debounce: 300,\n beforeFilter: () => true,\n placement: 'bottom-start',\n fallbackPlacements: () => [\n 'bottom-start',\n 'bottom',\n 'top-start',\n 'top',\n 'right',\n 'left',\n ],\n teleported: true,\n effect: 'light',\n tagType: 'info',\n tagEffect: 'light',\n validateEvent: true,\n persistent: true,\n showCheckedStrategy: 'child',\n showPrefix: true,\n popperStyle: undefined,\n valueOnClear: undefined,\n})\nconst emit = defineEmits(cascaderEmits)\nconst attrs = useAttrs()\nconst slots = defineSlots()\n\nlet inputInitialHeight = 0\nlet pressDeleteCount = 0\n\nconst nsCascader = useNamespace('cascader')\nconst nsInput = useNamespace('input')\nconst sizeMapPadding = {\n small: 7,\n default: 11,\n large: 15,\n}\n\nconst { t } = useLocale()\nconst { formItem } = useFormItem()\nconst isDisabled = useFormDisabled()\nconst { valueOnClear } = useEmptyValues(props)\nconst { isComposing, handleComposition } = useComposition({\n afterComposition(event) {\n const text = (event.target as HTMLInputElement)?.value\n handleInput(text)\n },\n})\n\nconst tooltipRef = ref<TooltipInstance>()\nconst tagTooltipRef = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst tagWrapper = ref<HTMLDivElement>()\nconst cascaderPanelRef = ref<CascaderPanelInstance>()\nconst suggestionPanel = ref<ScrollbarInstance>()\nconst popperVisible = ref(false)\nconst inputHover = ref(false)\nconst filtering = ref(false)\nconst inputValue = ref('')\nconst searchInputValue = ref('')\nconst tags = ref<Tag[]>([])\nconst suggestions = ref<CascaderNode[]>([])\n\nconst showTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags\n ? tags.value.slice(0, props.maxCollapseTags)\n : tags.value\n})\n\nconst collapseTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags ? tags.value.slice(props.maxCollapseTags) : []\n})\n\nconst cascaderStyle = computed(() => {\n return attrs.style as StyleValue\n})\n\nconst inputPlaceholder = computed(\n () => props.placeholder ?? t('el.cascader.placeholder')\n)\nconst currentPlaceholder = computed(() =>\n searchInputValue.value || tags.value.length > 0 || isComposing.value\n ? ''\n : inputPlaceholder.value\n)\nconst realSize = useFormSize()\nconst tagSize = computed(() =>\n realSize.value === 'small' ? 'small' : 'default'\n)\nconst multiple = computed(() => !!props.props.multiple)\nconst readonly = computed(() => !props.filterable || multiple.value)\nconst searchKeyword = computed(() =>\n multiple.value ? searchInputValue.value : inputValue.value\n)\nconst checkedNodes: ComputedRef<CascaderNode[]> = computed(\n () => cascaderPanelRef.value?.checkedNodes || []\n)\n\nconst { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {\n disabled: isDisabled,\n beforeBlur(event) {\n return (\n tooltipRef.value?.isFocusInsideContent(event) ||\n tagTooltipRef.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst clearBtnVisible = computed(() => {\n if (\n !props.clearable ||\n isDisabled.value ||\n filtering.value ||\n (!inputHover.value && !isFocused.value)\n )\n return false\n\n return !!checkedNodes.value.length\n})\nconst presentText = computed(() => {\n const { showAllLevels, separator } = props\n const nodes = checkedNodes.value\n return nodes.length\n ? multiple.value\n ? ''\n : nodes[0].calcText(showAllLevels, separator)\n : ''\n})\n\nconst validateState = computed(() => formItem?.validateState || '')\n\nconst checkedValue = computed<CascaderValue>({\n get() {\n return cloneDeep(props.modelValue) as CascaderValue\n },\n set(val) {\n // https://github.com/element-plus/element-plus/issues/17647\n const value = val ?? valueOnClear.value\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n if (props.validateEvent) {\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst cascaderKls = computed(() => {\n return [\n nsCascader.b(),\n nsCascader.m(realSize.value),\n nsCascader.is('disabled', isDisabled.value),\n attrs.class,\n ]\n})\n\nconst cascaderIconKls = computed(() => {\n return [\n nsInput.e('icon'),\n 'icon-arrow-down',\n nsCascader.is('reverse', popperVisible.value),\n ]\n})\n\nconst inputClass = computed(() => nsCascader.is('focus', isFocused.value))\n\nconst contentRef = computed(() => {\n return tooltipRef.value?.popperRef?.contentRef\n})\n\nconst handleClickOutside = (event: Event) => {\n if (isFocused.value) {\n const _event = new FocusEvent('blur', event)\n handleBlur(_event)\n }\n togglePopperVisible(false)\n}\n\nconst togglePopperVisible = (visible?: boolean) => {\n if (isDisabled.value) return\n\n visible = visible ?? !popperVisible.value\n\n if (visible !== popperVisible.value) {\n popperVisible.value = visible\n inputRef.value?.input?.setAttribute('aria-expanded', `${visible}`)\n\n if (visible) {\n updatePopperPosition()\n cascaderPanelRef.value &&\n nextTick(cascaderPanelRef.value.scrollToExpandingNode)\n } else if (props.filterable) {\n syncPresentTextValue()\n }\n\n emit('visibleChange', visible)\n }\n}\n\nconst updatePopperPosition = () => {\n nextTick(() => {\n tooltipRef.value?.updatePopper()\n })\n}\nconst hideSuggestionPanel = () => {\n filtering.value = false\n}\n\nconst genTag = (node: CascaderNode): Tag => {\n const { showAllLevels, separator } = props\n return {\n node,\n key: node.uid,\n text: node.calcText(showAllLevels, separator),\n hitState: false,\n closable: !isDisabled.value && !node.isDisabled,\n }\n}\n\nconst deleteTag = (tag: Tag) => {\n const node = tag.node as CascaderNode\n node.doCheck(false)\n cascaderPanelRef.value?.calculateCheckedValue()\n emit('removeTag', node.valueByOption)\n}\n\nconst getStrategyCheckedNodes = (): CascaderNode[] => {\n switch (props.showCheckedStrategy) {\n case 'child':\n return checkedNodes.value\n case 'parent': {\n const clickedNodes = getCheckedNodes(false)\n const clickedNodesValue = clickedNodes!.map((o) => o.value)\n const parentNodes = clickedNodes!.filter(\n (o) => !o.parent || !clickedNodesValue.includes(o.parent.value)\n )\n return parentNodes\n }\n default:\n return []\n }\n}\n\nconst calculatePresentTags = () => {\n if (!multiple.value) return\n\n const nodes = getStrategyCheckedNodes()\n\n const allTags: Tag[] = []\n nodes.forEach((node) => allTags.push(genTag(node)))\n tags.value = allTags\n}\n\nconst calculateSuggestions = () => {\n const { filterMethod, showAllLevels, separator } = props\n const res = cascaderPanelRef.value\n ?.getFlattedNodes(!props.props.checkStrictly)\n ?.filter((node) => {\n if (node.isDisabled) return false\n node.calcText(showAllLevels, separator)\n return filterMethod(node, searchKeyword.value)\n })\n\n if (multiple.value) {\n tags.value.forEach((tag) => {\n tag.hitState = false\n })\n }\n\n filtering.value = true\n suggestions.value = res!\n updatePopperPosition()\n}\n\nconst focusFirstNode = () => {\n let firstNode!: HTMLElement\n\n if (filtering.value && suggestionPanel.value) {\n firstNode = suggestionPanel.value.$el.querySelector(\n `.${nsCascader.e('suggestion-item')}`\n )\n } else {\n firstNode = cascaderPanelRef.value?.$el.querySelector(\n `.${nsCascader.b('node')}[tabindex=\"-1\"]`\n )\n }\n\n if (firstNode) {\n firstNode.focus()\n !filtering.value && firstNode.click()\n }\n}\n\nconst updateStyle = () => {\n const inputInner = inputRef.value?.input\n const tagWrapperEl = tagWrapper.value\n const suggestionPanelEl = suggestionPanel.value?.$el\n\n if (!isClient || !inputInner) return\n\n if (suggestionPanelEl) {\n const suggestionList = suggestionPanelEl.querySelector(\n `.${nsCascader.e('suggestion-list')}`\n )\n suggestionList.style.minWidth = `${inputInner.offsetWidth}px`\n }\n\n if (tagWrapperEl) {\n const { offsetHeight } = tagWrapperEl\n // 2 is el-input__wrapper padding\n const height =\n tags.value.length > 0\n ? `${Math.max(offsetHeight, inputInitialHeight) - 2}px`\n : `${inputInitialHeight}px`\n inputInner.style.height = height\n // if prefix slot exists, update tagWrapperEl left position\n if (slots.prefix) {\n const prefix = inputRef.value?.$el.querySelector(\n `.${nsInput.e('prefix')}`\n ) as HTMLElement\n let left = 0\n if (prefix) {\n left = prefix.offsetWidth\n if (left > 0) {\n left += sizeMapPadding[realSize.value || 'default'] // this is the default padding of el-input__wrapper\n }\n }\n tagWrapperEl.style.left = `${left}px`\n } else {\n tagWrapperEl.style.left = `0`\n }\n updatePopperPosition()\n }\n}\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return cascaderPanelRef.value?.getCheckedNodes(leafOnly)\n}\n\nconst handleExpandChange = (value: CascaderValue) => {\n updatePopperPosition()\n emit('expandChange', value)\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (isComposing.value) return\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n togglePopperVisible()\n break\n case EVENT_CODE.down:\n togglePopperVisible(true)\n nextTick(focusFirstNode)\n e.preventDefault()\n break\n case EVENT_CODE.esc:\n if (popperVisible.value === true) {\n e.preventDefault()\n e.stopPropagation()\n togglePopperVisible(false)\n }\n break\n case EVENT_CODE.tab:\n togglePopperVisible(false)\n break\n }\n}\n\nconst handleClear = () => {\n cascaderPanelRef.value?.clearCheckedNodes()\n if (!popperVisible.value && props.filterable) {\n syncPresentTextValue()\n }\n togglePopperVisible(false)\n emit('clear')\n}\n\nconst syncPresentTextValue = () => {\n const { value } = presentText\n inputValue.value = value\n searchInputValue.value = value\n}\n\nconst handleSuggestionClick = (node: CascaderNode) => {\n const { checked } = node\n\n if (multiple.value) {\n cascaderPanelRef.value?.handleCheckChange(node, !checked, false)\n } else {\n !checked && cascaderPanelRef.value?.handleCheckChange(node, true, false)\n togglePopperVisible(false)\n }\n}\n\nconst handleSuggestionKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(\n target,\n distance,\n `.${nsCascader.e('suggestion-item')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n target.click()\n break\n }\n}\n\nconst handleDelete = () => {\n const lastTag = tags.value[tags.value.length - 1]\n pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1\n\n if (\n !lastTag ||\n !pressDeleteCount ||\n (props.collapseTags && tags.value.length > 1)\n )\n return\n\n if (lastTag.hitState) {\n deleteTag(lastTag)\n } else {\n lastTag.hitState = true\n }\n}\n\nconst debounce = computed(() => props.debounce)\nconst handleFilter = useDebounceFn(() => {\n const { value } = searchKeyword\n\n if (!value) return\n\n const passed = props.beforeFilter(value)\n\n if (isPromise(passed)) {\n passed.then(calculateSuggestions).catch(() => {\n /* prevent log error */\n })\n } else if (passed !== false) {\n calculateSuggestions()\n } else {\n hideSuggestionPanel()\n }\n}, debounce)\n\nconst handleInput = (val: string, e?: InputEvent) => {\n !popperVisible.value && togglePopperVisible(true)\n\n if (e?.isComposing) return\n\n if (val) {\n handleFilter()\n } else {\n const passed = props.beforeFilter('')\n if (isPromise(passed)) {\n passed.catch(() => {\n /* prevent log error */\n })\n }\n hideSuggestionPanel()\n }\n}\n\nconst getInputInnerHeight = (inputInner: HTMLElement): number =>\n Number.parseFloat(\n useCssVar(nsInput.cssVarName('input-height'), inputInner).value!\n ) - 2\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nwatch(filtering, updatePopperPosition)\n\nwatch(\n [\n checkedNodes,\n isDisabled,\n () => props.collapseTags,\n () => props.maxCollapseTags,\n ],\n calculatePresentTags\n)\n\nwatch(tags, () => {\n nextTick(() => updateStyle())\n})\n\nwatch(realSize, async () => {\n await nextTick()\n const inputInner = inputRef.value!.input!\n inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight\n updateStyle()\n})\n\nwatch(presentText, syncPresentTextValue, { immediate: true })\n\nwatch(\n () => popperVisible.value,\n (val) => {\n if (val && props.props.lazy && props.props.lazyLoad) {\n cascaderPanelRef.value?.loadLazyRootNodes()\n }\n }\n)\n\nonMounted(() => {\n const inputInner = inputRef.value!.input!\n\n const inputInnerHeight = getInputInnerHeight(inputInner)\n\n inputInitialHeight = inputInner.offsetHeight || inputInnerHeight\n useResizeObserver(inputInner, updateStyle)\n})\n\ndefineExpose({\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description cascader panel ref\n */\n cascaderPanelRef,\n /**\n * @description toggle the visible of popper\n */\n togglePopperVisible,\n /**\n * @description cascader content ref\n */\n contentRef,\n /**\n * @description selected content text\n */\n presentText,\n /** @description focus the input element */\n focus,\n /** @description blur the input element */\n blur,\n})\n</script>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"cascader2.js","names":[],"sources":["../../../../../../packages/components/cascader/src/cascader.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"tooltipRef\"\n :visible=\"popperVisible\"\n :popper-class=\"[nsCascader.e('dropdown'), popperClass!]\"\n :popper-style=\"popperStyle\"\n :stop-popper-mouse-event=\"false\"\n :gpu-acceleration=\"false\"\n :show-arrow=\"false\"\n :transition=\"`${nsCascader.namespace.value}-fade-in-linear`\"\n pure\n teleported\n :persistent=\"persistent\"\n @hide=\"hideSuggestionPanel\"\n >\n <template #default>\n <div\n ref=\"wrapperRef\"\n v-clickoutside:[contentRef]=\"handleClickOutside\"\n :class=\"cascaderKls\"\n :style=\"cascaderStyle\"\n @click=\"() => togglePopperVisible(readonly ? undefined : true)\"\n @keydown=\"handleKeyDown\"\n @mouseenter=\"inputHover = true\"\n @mouseleave=\"inputHover = false\"\n >\n <el-input\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :placeholder=\"currentPlaceholder\"\n :readonly=\"readonly\"\n :disabled=\"isDisabled\"\n :validate-event=\"false\"\n :size=\"realSize\"\n :class=\"inputClass\"\n :tabindex=\"multiple && filterable && !isDisabled ? -1 : undefined\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n @input=\"handleInput\"\n >\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template #suffix>\n <el-icon\n v-if=\"clearBtnVisible\"\n key=\"clear\"\n :class=\"[nsInput.e('icon'), 'icon-circle-close']\"\n @click.stop=\"handleClear\"\n >\n <el-icon-content :icon=\"clearIcon\" />\n </el-icon>\n <el-icon\n v-else\n key=\"arrow-down\"\n :class=\"cascaderIconKls\"\n @click.stop=\"togglePopperVisible()\"\n >\n <arrow-down />\n </el-icon>\n </template>\n </el-input>\n\n <div\n v-if=\"multiple\"\n ref=\"tagWrapper\"\n :class=\"[\n nsCascader.e('tags'),\n nsCascader.is('validate', Boolean(validateState)),\n ]\"\n >\n <slot name=\"tag\" :data=\"tags\" :delete-tag=\"deleteTag\">\n <el-tag\n v-for=\"tag in showTagList\"\n :key=\"tag.key\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </slot>\n <el-tooltip\n v-if=\"collapseTags && tags.length > maxCollapseTags\"\n ref=\"tagTooltipRef\"\n :disabled=\"popperVisible || !collapseTagsTooltip\"\n trigger=\"click\"\n :popper-class=\"popperClass\"\n :popper-style=\"popperStyle\"\n effect=\"light\"\n :persistent=\"persistent\"\n >\n <template #default>\n <el-tag\n :closable=\"false\"\n :size=\"tagSize\"\n :type=\"tagType\"\n :effect=\"tagEffect\"\n disable-transitions\n >\n <span :class=\"nsCascader.e('tags-text')\">\n + {{ tags.length - maxCollapseTags }}\n </span>\n </el-tag>\n </template>\n <template #content>\n <el-scrollbar :max-height=\"maxCollapseTagsTooltipHeight\">\n <div :class=\"nsCascader.e('collapse-tags')\">\n <div\n v-for=\"(tag, idx) in collapseTagList\"\n :key=\"idx\"\n :class=\"nsCascader.e('collapse-tag')\"\n >\n <el-tag\n :key=\"tag.key\"\n class=\"in-tooltip\"\n :type=\"tagType\"\n :size=\"tagSize\"\n :effect=\"tagEffect\"\n :hit=\"tag.hitState\"\n :closable=\"tag.closable\"\n disable-transitions\n @close=\"deleteTag(tag)\"\n >\n <span>{{ tag.text }}</span>\n </el-tag>\n </div>\n </div>\n </el-scrollbar>\n </template>\n </el-tooltip>\n <input\n v-if=\"filterable && !isDisabled\"\n v-model=\"searchInputValue\"\n type=\"text\"\n :class=\"nsCascader.e('search-input')\"\n :placeholder=\"presentText ? '' : inputPlaceholder\"\n @input=\"(e) => handleInput(searchInputValue, e as InputEvent)\"\n @click.stop=\"togglePopperVisible(true)\"\n @keydown.delete=\"handleDelete\"\n @compositionstart=\"handleComposition\"\n @compositionupdate=\"handleComposition\"\n @compositionend=\"handleComposition\"\n />\n </div>\n </div>\n </template>\n\n <template #content>\n <div v-if=\"$slots.header\" :class=\"nsCascader.e('header')\" @click.stop>\n <slot name=\"header\" />\n </div>\n <el-cascader-panel\n v-show=\"!filtering\"\n ref=\"cascaderPanelRef\"\n v-model=\"checkedValue\"\n :options=\"options\"\n :props=\"panelProps\"\n :border=\"false\"\n :render-label=\"$slots.default\"\n @expand-change=\"handleExpandChange\"\n @close=\"$nextTick(() => togglePopperVisible(false))\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-panel>\n <el-scrollbar\n v-if=\"filterable\"\n v-show=\"filtering\"\n ref=\"suggestionPanel\"\n tag=\"ul\"\n :class=\"nsCascader.e('suggestion-panel')\"\n :view-class=\"nsCascader.e('suggestion-list')\"\n @keydown=\"handleSuggestionKeyDown\"\n >\n <template v-if=\"suggestions.length\">\n <li\n v-for=\"item in suggestions\"\n :key=\"item.uid\"\n :class=\"[\n nsCascader.e('suggestion-item'),\n nsCascader.is('checked', item.checked),\n ]\"\n :tabindex=\"-1\"\n @click=\"handleSuggestionClick(item)\"\n >\n <slot name=\"suggestion-item\" :item=\"item\">\n <span>{{ item.text }}</span>\n <el-icon v-if=\"item.checked\">\n <check />\n </el-icon>\n </slot>\n </li>\n </template>\n <slot v-else name=\"empty\">\n <li :class=\"nsCascader.e('empty-text')\">\n {{ t('el.cascader.noMatch') }}\n </li>\n </slot>\n </el-scrollbar>\n <div v-if=\"$slots.footer\" :class=\"nsCascader.e('footer')\" @click.stop>\n <slot name=\"footer\" />\n </div>\n </template>\n </el-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n markRaw,\n nextTick,\n onMounted,\n ref,\n useAttrs,\n watch,\n} from 'vue'\nimport { cloneDeep } from 'lodash-unified'\nimport { useCssVar, useDebounceFn, useResizeObserver } from '@vueuse/core'\nimport {\n ArrowDown,\n Check,\n CircleClose,\n debugWarn,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isPromise,\n} from '@element-plus/utils'\nimport ElCascaderPanel from '@element-plus/components/cascader-panel'\nimport ElInput from '@element-plus/components/input'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElTag from '@element-plus/components/tag'\nimport ElIcon from '@element-plus/components/icon'\nimport ElIconContent from '@element-plus/components/icon/src/icon-content.vue'\nimport {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport { ClickOutside as vClickoutside } from '@element-plus/directives'\nimport {\n useComposition,\n useEmptyValues,\n useFocusController,\n useLocale,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { cascaderEmits } from './cascader'\n\nimport type { ComputedRef, StyleValue } from 'vue'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { ScrollbarInstance } from '@element-plus/components/scrollbar'\nimport type {\n CascaderNode,\n CascaderPanelInstance,\n CascaderProps as CascaderPanelProps,\n CascaderValue,\n Tag,\n} from '@element-plus/components/cascader-panel'\nimport type { CascaderComponentProps } from './cascader'\n\ndefineOptions({\n name: 'ElCascader',\n})\n\nconst props = withDefaults(defineProps<CascaderComponentProps>(), {\n options: () => [],\n props: () => ({}),\n disabled: undefined,\n clearIcon: markRaw(CircleClose),\n filterMethod: (node, keyword) => node.text.includes(keyword),\n separator: ' / ',\n showAllLevels: true,\n maxCollapseTags: 1,\n debounce: 300,\n beforeFilter: () => true,\n tagType: 'info',\n tagEffect: 'light',\n validateEvent: true,\n persistent: true,\n showCheckedStrategy: 'child',\n showPrefix: true,\n popperStyle: undefined,\n valueOnClear: undefined,\n})\nconst emit = defineEmits(cascaderEmits)\nconst attrs = useAttrs()\nconst slots = defineSlots()\n\nlet inputInitialHeight = 0\nlet pressDeleteCount = 0\n\nconst nsCascader = useNamespace('cascader')\nconst nsInput = useNamespace('input')\nconst sizeMapPadding = {\n small: 7,\n default: 11,\n large: 15,\n}\n\nconst { t } = useLocale()\nconst { formItem } = useFormItem()\nconst isDisabled = useFormDisabled()\nconst { valueOnClear } = useEmptyValues(props)\nconst { isComposing, handleComposition } = useComposition({\n afterComposition(event) {\n const text = (event.target as HTMLInputElement)?.value\n handleInput(text)\n },\n})\n\nconst tooltipRef = ref<TooltipInstance>()\nconst tagTooltipRef = ref<TooltipInstance>()\nconst inputRef = ref<InputInstance>()\nconst tagWrapper = ref<HTMLDivElement>()\nconst cascaderPanelRef = ref<CascaderPanelInstance>()\nconst suggestionPanel = ref<ScrollbarInstance>()\nconst popperVisible = ref(false)\nconst inputHover = ref(false)\nconst filtering = ref(false)\nconst inputValue = ref('')\nconst searchInputValue = ref('')\nconst tags = ref<Tag[]>([])\nconst suggestions = ref<CascaderNode[]>([])\n\nconst showTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags\n ? tags.value.slice(0, props.maxCollapseTags)\n : tags.value\n})\n\nconst collapseTagList = computed(() => {\n if (!props.props.multiple) {\n return []\n }\n return props.collapseTags ? tags.value.slice(props.maxCollapseTags) : []\n})\n\nconst cascaderStyle = computed(() => {\n return attrs.style as StyleValue\n})\n\nconst inputPlaceholder = computed(\n () => props.placeholder ?? t('el.cascader.placeholder')\n)\nconst currentPlaceholder = computed(() =>\n searchInputValue.value || tags.value.length > 0 || isComposing.value\n ? ''\n : inputPlaceholder.value\n)\nconst realSize = useFormSize()\nconst tagSize = computed(() =>\n realSize.value === 'small' ? 'small' : 'default'\n)\nconst multiple = computed(() => !!props.props.multiple)\nconst readonly = computed(() => !props.filterable || multiple.value)\nconst panelProps = computed<CascaderPanelProps>(() => ({\n ...props.props,\n expandTrigger: 'click',\n hoverThreshold: 0,\n}))\nconst searchKeyword = computed(() =>\n multiple.value ? searchInputValue.value : inputValue.value\n)\nconst checkedNodes: ComputedRef<CascaderNode[]> = computed(\n () => cascaderPanelRef.value?.checkedNodes || []\n)\n\nconst { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {\n disabled: isDisabled,\n beforeBlur(event) {\n return (\n tooltipRef.value?.isFocusInsideContent(event) ||\n tagTooltipRef.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst clearBtnVisible = computed(() => {\n if (\n !props.clearable ||\n isDisabled.value ||\n filtering.value ||\n (!inputHover.value && !isFocused.value)\n )\n return false\n\n return !!checkedNodes.value.length\n})\nconst presentText = computed(() => {\n const { showAllLevels, separator } = props\n const nodes = checkedNodes.value\n return nodes.length\n ? multiple.value\n ? ''\n : nodes[0].calcText(showAllLevels, separator)\n : ''\n})\n\nconst validateState = computed(() => formItem?.validateState || '')\n\nconst checkedValue = computed<CascaderValue>({\n get() {\n return cloneDeep(props.modelValue) as CascaderValue\n },\n set(val) {\n // https://github.com/element-plus/element-plus/issues/17647\n const value = val ?? valueOnClear.value\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n if (props.validateEvent) {\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n },\n})\n\nconst cascaderKls = computed(() => {\n return [\n nsCascader.b(),\n nsCascader.m(realSize.value),\n nsCascader.is('disabled', isDisabled.value),\n attrs.class,\n ]\n})\n\nconst cascaderIconKls = computed(() => {\n return [\n nsInput.e('icon'),\n 'icon-arrow-down',\n nsCascader.is('reverse', popperVisible.value),\n ]\n})\n\nconst inputClass = computed(() => nsCascader.is('focus', isFocused.value))\n\nconst contentRef = computed(() => {\n return tooltipRef.value?.popperRef?.contentRef\n})\n\nconst handleClickOutside = (event: Event) => {\n if (isFocused.value) {\n const _event = new FocusEvent('blur', event)\n handleBlur(_event)\n }\n togglePopperVisible(false)\n}\n\nconst togglePopperVisible = (visible?: boolean) => {\n if (isDisabled.value) return\n\n visible = visible ?? !popperVisible.value\n\n if (visible !== popperVisible.value) {\n popperVisible.value = visible\n inputRef.value?.input?.setAttribute('aria-expanded', `${visible}`)\n\n if (visible) {\n updatePopperPosition()\n cascaderPanelRef.value &&\n nextTick(cascaderPanelRef.value.scrollToExpandingNode)\n } else if (props.filterable) {\n syncPresentTextValue()\n }\n\n emit('visibleChange', visible)\n }\n}\n\nconst updatePopperPosition = () => {\n nextTick(() => {\n tooltipRef.value?.updatePopper()\n })\n}\nconst hideSuggestionPanel = () => {\n filtering.value = false\n}\n\nconst genTag = (node: CascaderNode): Tag => {\n const { showAllLevels, separator } = props\n return {\n node,\n key: node.uid,\n text: node.calcText(showAllLevels, separator),\n hitState: false,\n closable: !isDisabled.value && !node.isDisabled,\n }\n}\n\nconst deleteTag = (tag: Tag) => {\n const node = tag.node as CascaderNode\n node.doCheck(false)\n cascaderPanelRef.value?.calculateCheckedValue()\n emit('removeTag', node.valueByOption)\n}\n\nconst getStrategyCheckedNodes = (): CascaderNode[] => {\n switch (props.showCheckedStrategy) {\n case 'child':\n return checkedNodes.value\n case 'parent': {\n const clickedNodes = getCheckedNodes(false)\n const clickedNodesValue = clickedNodes!.map((o) => o.value)\n const parentNodes = clickedNodes!.filter(\n (o) => !o.parent || !clickedNodesValue.includes(o.parent.value)\n )\n return parentNodes\n }\n default:\n return []\n }\n}\n\nconst calculatePresentTags = () => {\n if (!multiple.value) return\n\n const nodes = getStrategyCheckedNodes()\n\n const allTags: Tag[] = []\n nodes.forEach((node) => allTags.push(genTag(node)))\n tags.value = allTags\n}\n\nconst calculateSuggestions = () => {\n const { filterMethod, showAllLevels, separator } = props\n const res = cascaderPanelRef.value\n ?.getFlattedNodes(!props.props.checkStrictly)\n ?.filter((node) => {\n if (node.isDisabled) return false\n node.calcText(showAllLevels, separator)\n return filterMethod(node, searchKeyword.value)\n })\n\n if (multiple.value) {\n tags.value.forEach((tag) => {\n tag.hitState = false\n })\n }\n\n filtering.value = true\n suggestions.value = res!\n updatePopperPosition()\n}\n\nconst focusFirstNode = () => {\n let firstNode!: HTMLElement\n\n if (filtering.value && suggestionPanel.value) {\n firstNode = suggestionPanel.value.$el.querySelector(\n `.${nsCascader.e('suggestion-item')}`\n )\n } else {\n firstNode = cascaderPanelRef.value?.$el.querySelector(\n `.${nsCascader.b('node')}[tabindex=\"-1\"]`\n )\n }\n\n if (firstNode) {\n firstNode.focus()\n !filtering.value && firstNode.click()\n }\n}\n\nconst updateStyle = () => {\n const inputInner = inputRef.value?.input\n const tagWrapperEl = tagWrapper.value\n const suggestionPanelEl = suggestionPanel.value?.$el\n\n if (!isClient || !inputInner) return\n\n if (suggestionPanelEl) {\n const suggestionList = suggestionPanelEl.querySelector(\n `.${nsCascader.e('suggestion-list')}`\n )\n suggestionList.style.minWidth = `${inputInner.offsetWidth}px`\n }\n\n if (tagWrapperEl) {\n const { offsetHeight } = tagWrapperEl\n // 2 is el-input__wrapper padding\n const height =\n tags.value.length > 0\n ? `${Math.max(offsetHeight, inputInitialHeight) - 2}px`\n : `${inputInitialHeight}px`\n inputInner.style.height = height\n // if prefix slot exists, update tagWrapperEl left position\n if (slots.prefix) {\n const prefix = inputRef.value?.$el.querySelector(\n `.${nsInput.e('prefix')}`\n ) as HTMLElement\n let left = 0\n if (prefix) {\n left = prefix.offsetWidth\n if (left > 0) {\n left += sizeMapPadding[realSize.value || 'default'] // this is the default padding of el-input__wrapper\n }\n }\n tagWrapperEl.style.left = `${left}px`\n } else {\n tagWrapperEl.style.left = `0`\n }\n updatePopperPosition()\n }\n}\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return cascaderPanelRef.value?.getCheckedNodes(leafOnly)\n}\n\nconst handleExpandChange = (value: CascaderValue) => {\n updatePopperPosition()\n emit('expandChange', value)\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (isComposing.value) return\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n togglePopperVisible()\n break\n case EVENT_CODE.down:\n togglePopperVisible(true)\n nextTick(focusFirstNode)\n e.preventDefault()\n break\n case EVENT_CODE.esc:\n if (popperVisible.value === true) {\n e.preventDefault()\n e.stopPropagation()\n togglePopperVisible(false)\n }\n break\n case EVENT_CODE.tab:\n togglePopperVisible(false)\n break\n }\n}\n\nconst handleClear = () => {\n cascaderPanelRef.value?.clearCheckedNodes()\n if (!popperVisible.value && props.filterable) {\n syncPresentTextValue()\n }\n togglePopperVisible(false)\n emit('clear')\n}\n\nconst syncPresentTextValue = () => {\n const { value } = presentText\n inputValue.value = value\n searchInputValue.value = value\n}\n\nconst handleSuggestionClick = (node: CascaderNode) => {\n const { checked } = node\n\n if (multiple.value) {\n cascaderPanelRef.value?.handleCheckChange(node, !checked, false)\n } else {\n !checked && cascaderPanelRef.value?.handleCheckChange(node, true, false)\n togglePopperVisible(false)\n }\n}\n\nconst handleSuggestionKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(\n target,\n distance,\n `.${nsCascader.e('suggestion-item')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n target.click()\n break\n }\n}\n\nconst handleDelete = () => {\n const lastTag = tags.value[tags.value.length - 1]\n pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1\n\n if (\n !lastTag ||\n !pressDeleteCount ||\n (props.collapseTags && tags.value.length > 1)\n )\n return\n\n if (lastTag.hitState) {\n deleteTag(lastTag)\n } else {\n lastTag.hitState = true\n }\n}\n\nconst debounce = computed(() => props.debounce)\nconst handleFilter = useDebounceFn(() => {\n const { value } = searchKeyword\n\n if (!value) return\n\n const passed = props.beforeFilter(value)\n\n if (isPromise(passed)) {\n passed.then(calculateSuggestions).catch(() => {\n /* prevent log error */\n })\n } else if (passed !== false) {\n calculateSuggestions()\n } else {\n hideSuggestionPanel()\n }\n}, debounce)\n\nconst handleInput = (val: string, e?: InputEvent) => {\n !popperVisible.value && togglePopperVisible(true)\n\n if (e?.isComposing) return\n\n if (val) {\n handleFilter()\n } else {\n const passed = props.beforeFilter('')\n if (isPromise(passed)) {\n passed.catch(() => {\n /* prevent log error */\n })\n }\n hideSuggestionPanel()\n }\n}\n\nconst getInputInnerHeight = (inputInner: HTMLElement): number =>\n Number.parseFloat(\n useCssVar(nsInput.cssVarName('input-height'), inputInner).value!\n ) - 2\n\nconst focus = () => {\n inputRef.value?.focus()\n}\n\nconst blur = () => {\n inputRef.value?.blur()\n}\n\nwatch(filtering, updatePopperPosition)\n\nwatch(\n [\n checkedNodes,\n isDisabled,\n () => props.collapseTags,\n () => props.maxCollapseTags,\n ],\n calculatePresentTags\n)\n\nwatch(tags, () => {\n nextTick(() => updateStyle())\n})\n\nwatch(realSize, async () => {\n await nextTick()\n const inputInner = inputRef.value!.input!\n inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight\n updateStyle()\n})\n\nwatch(presentText, syncPresentTextValue, { immediate: true })\n\nwatch(\n () => popperVisible.value,\n (val) => {\n if (val && props.props.lazy && props.props.lazyLoad) {\n cascaderPanelRef.value?.loadLazyRootNodes()\n }\n }\n)\n\nonMounted(() => {\n const inputInner = inputRef.value!.input!\n\n const inputInnerHeight = getInputInnerHeight(inputInner)\n\n inputInitialHeight = inputInner.offsetHeight || inputInnerHeight\n useResizeObserver(inputInner, updateStyle)\n})\n\ndefineExpose({\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description cascader panel ref\n */\n cascaderPanelRef,\n /**\n * @description toggle the visible of popper\n */\n togglePopperVisible,\n /**\n * @description cascader content ref\n */\n contentRef,\n /**\n * @description selected content text\n */\n presentText,\n /** @description focus the input element */\n focus,\n /** @description blur the input element */\n blur,\n})\n</script>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/index.vue"],"sourcesContent":["<template>\n <div\n :class=\"[ns.b('panel'), ns.is('bordered', border)]\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item as CascaderMenuInstance)\"\n :index=\"index\"\n :nodes=\"[...menu]\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-menu>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n useSlots,\n watch,\n} from 'vue'\nimport { cloneDeep, flattenDeep, isEqual } from 'lodash-unified'\nimport {\n castArray,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isEmpty,\n scrollIntoView,\n unique,\n} from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { useNamespace } from '@element-plus/hooks'\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node from './node'\nimport { cascaderPanelEmits, useCascaderConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type {\n CascaderNode,\n CascaderNodeValue,\n CascaderOption,\n CascaderValue,\n ElCascaderPanelContext,\n} from './types'\nimport type { CascaderMenuInstance } from './instance'\nimport type { CascaderPanelProps } from './config'\n\ndefineOptions({\n name: 'ElCascaderPanel',\n})\n\nconst props = withDefaults(defineProps<CascaderPanelProps>(), {\n options: () => [],\n props: () => ({}),\n border: true,\n})\nconst emit = defineEmits(cascaderPanelEmits)\n\n// for interrupt sync check status in lazy mode\nlet manualChecked = false\n\nconst ns = useNamespace('cascader')\nconst config = useCascaderConfig(props)\nconst slots = useSlots()\n\nlet store: Store\nconst initialLoaded = ref(true)\nconst initialLoadedOnce = ref(false)\nconst menuList = ref<CascaderMenuInstance[]>([])\nconst checkedValue = ref<CascaderValue>()\nconst menus = ref<CascaderNode[][]>([])\nconst expandingNode = ref<CascaderNode>()\nconst checkedNodes = ref<CascaderNode[]>([])\n\nconst isHoverMenu = computed(() => config.value.expandTrigger === 'hover')\nconst renderLabelFn = computed(() => props.renderLabel || slots.default)\n\nconst initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded.value = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded.value = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n}\n\nconst lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList?: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n dataList && store?.appendNodes(dataList, parent as Node)\n dataList && cb?.(dataList)\n if (node.level === 0) {\n initialLoadedOnce.value = true\n }\n }\n\n const reject = () => {\n node!.loading = false\n node!.loaded = false\n if (node!.level === 0) {\n initialLoaded.value = true\n }\n }\n\n cfg.lazyLoad(node, resolve, reject)\n}\n\nconst expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: CascaderNode\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n}\n\nconst handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && expandParentNode(node)\n}\n\nconst expandParentNode = (node: Node | undefined) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n}\n\nconst getFlattedNodes = (leafOnly: boolean) => store?.getFlattedNodes(leafOnly)\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter(({ checked }) => checked !== false)\n}\n\nconst clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n menus.value = menus.value.slice(0, 1)\n expandingNode.value = undefined\n emit('expand-change', [])\n}\n\nconst calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : (values[0] ?? null)\n}\n\nconst syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded.value ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = unique(\n flattenDeep(castArray(modelValue as CascaderNodeValue[]))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple ? castArray(modelValue) : [modelValue]\n const nodes = unique(\n values.map((val) =>\n store?.getNodeByValue(val as CascaderNodeValue, leafOnly)\n )\n ) as Node[]\n syncMenuState(nodes, forced)\n checkedValue.value = cloneDeep(modelValue ?? undefined)\n }\n}\n\nconst syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = undefined\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n reactive(newNodes).forEach((node) => node.doCheck(true))\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n}\n\nconst scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n const container = menuElement.querySelector(\n `.${ns.namespace.value}-scrollbar__wrap`\n )\n let activeNode = menuElement.querySelector(\n `.${ns.b('node')}.in-active-path`\n )\n if (!activeNode) {\n const activeElements = menuElement.querySelectorAll(\n `.${ns.b('node')}.${ns.is('active')}`\n )\n activeNode = activeElements[activeElements.length - 1]\n }\n scrollIntoView(container, activeNode)\n }\n })\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(\n target,\n distance,\n `.${ns.b('node')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n `.${ns.b('node')}[aria-expanded=\"true\"]`\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n `.${ns.b('node')}[tabindex=\"-1\"]`\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n checkNode(target)\n break\n }\n}\n\nprovide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n initialLoaded,\n renderLabelFn,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n)\n\nwatch(\n config,\n (newVal, oldVal) => {\n if (isEqual(newVal, oldVal)) return\n initStore()\n },\n {\n immediate: true,\n }\n)\n\nwatch(() => props.options, initStore, {\n deep: true,\n})\n\nwatch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n },\n {\n deep: true,\n }\n)\n\nwatch(\n () => checkedValue.value,\n (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n }\n)\n\nconst loadLazyRootNodes = () => {\n if (initialLoadedOnce.value) return\n initStore()\n}\n\nonBeforeUpdate(() => (menuList.value = []))\n\nonMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\ndefineExpose({\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description clear checked nodes\n */\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n loadLazyRootNodes,\n})\n</script>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/index.vue"],"sourcesContent":["<template>\n <div\n ref=\"panelRef\"\n :class=\"[ns.b('panel'), ns.is('bordered', border)]\"\n @keydown=\"handleKeyDown\"\n >\n <el-cascader-menu\n v-for=\"(menu, index) in menus\"\n :key=\"index\"\n :ref=\"(item) => (menuList[index] = item as CascaderMenuInstance)\"\n :index=\"index\"\n :nodes=\"[...menu]\"\n >\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </el-cascader-menu>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onBeforeUpdate,\n onMounted,\n provide,\n reactive,\n ref,\n useSlots,\n watch,\n} from 'vue'\nimport { cloneDeep, flattenDeep, isEqual } from 'lodash-unified'\nimport {\n castArray,\n focusNode,\n getEventCode,\n getSibling,\n isClient,\n isEmpty,\n scrollIntoView,\n unique,\n} from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { useNamespace } from '@element-plus/hooks'\nimport ElCascaderMenu from './menu.vue'\nimport Store from './store'\nimport Node from './node'\nimport { cascaderPanelEmits, useCascaderConfig } from './config'\nimport { checkNode, getMenuIndex, sortByOriginalOrder } from './utils'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type {\n CascaderNode,\n CascaderNodeValue,\n CascaderOption,\n CascaderValue,\n ElCascaderPanelContext,\n} from './types'\nimport type { CascaderMenuInstance } from './instance'\nimport type { CascaderPanelProps } from './config'\n\ndefineOptions({\n name: 'ElCascaderPanel',\n})\n\nconst props = withDefaults(defineProps<CascaderPanelProps>(), {\n options: () => [],\n props: () => ({}),\n border: true,\n})\nconst emit = defineEmits(cascaderPanelEmits)\n\n// for interrupt sync check status in lazy mode\nlet manualChecked = false\n\nconst ns = useNamespace('cascader')\nconst config = useCascaderConfig(props)\nconst slots = useSlots()\n\nlet store: Store\nconst initialLoaded = ref(true)\nconst initialLoadedOnce = ref(false)\nconst menuList = ref<CascaderMenuInstance[]>([])\nconst panelRef = ref<HTMLDivElement>()\nconst checkedValue = ref<CascaderValue>()\nconst menus = ref<CascaderNode[][]>([])\nconst expandingNode = ref<CascaderNode>()\nconst checkedNodes = ref<CascaderNode[]>([])\n\nconst isHoverMenu = computed(() => config.value.expandTrigger === 'hover')\nconst renderLabelFn = computed(() => props.renderLabel || slots.default)\n\nconst initStore = () => {\n const { options } = props\n const cfg = config.value\n\n manualChecked = false\n store = new Store(options, cfg)\n menus.value = [store.getNodes()]\n\n if (cfg.lazy && isEmpty(props.options)) {\n initialLoaded.value = false\n lazyLoad(undefined, (list) => {\n if (list) {\n store = new Store(list, cfg)\n menus.value = [store.getNodes()]\n }\n initialLoaded.value = true\n syncCheckedValue(false, true)\n })\n } else {\n syncCheckedValue(false, true)\n }\n}\n\nconst lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {\n const cfg = config.value\n node! = node || new Node({}, cfg, undefined, true)\n node.loading = true\n\n const resolve = (dataList?: CascaderOption[]) => {\n const _node = node as Node\n const parent = _node.root ? null : _node\n _node.loading = false\n _node.loaded = true\n _node.childrenData = _node.childrenData || []\n dataList && store?.appendNodes(dataList, parent as Node)\n dataList && cb?.(dataList)\n if (node.level === 0) {\n initialLoadedOnce.value = true\n }\n }\n\n const reject = () => {\n node!.loading = false\n node!.loaded = false\n if (node!.level === 0) {\n initialLoaded.value = true\n }\n }\n\n cfg.lazyLoad(node, resolve, reject)\n}\n\nconst expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {\n const { level } = node\n const newMenus = menus.value.slice(0, level)\n let newExpandingNode: CascaderNode\n\n if (node.isLeaf) {\n newExpandingNode = node.pathNodes[level - 2]\n } else {\n newExpandingNode = node\n newMenus.push(node.children)\n }\n\n if (expandingNode.value?.uid !== newExpandingNode?.uid) {\n expandingNode.value = node\n menus.value = newMenus\n !silent && emit('expand-change', node?.pathValues || [])\n }\n}\n\nconst handleCheckChange: ElCascaderPanelContext['handleCheckChange'] = (\n node,\n checked,\n emitClose = true\n) => {\n const { checkStrictly, multiple } = config.value\n const oldNode = checkedNodes.value[0]\n manualChecked = true\n\n !multiple && oldNode?.doCheck(false)\n node.doCheck(checked)\n calculateCheckedValue()\n emitClose && !multiple && !checkStrictly && emit('close')\n !emitClose && !multiple && expandParentNode(node)\n}\n\nconst expandParentNode = (node: Node | undefined) => {\n if (!node) return\n node = node.parent\n expandParentNode(node)\n node && expandNode(node)\n}\n\nconst getFlattedNodes = (leafOnly: boolean) => store?.getFlattedNodes(leafOnly)\n\nconst getCheckedNodes = (leafOnly: boolean) => {\n return getFlattedNodes(leafOnly)?.filter(({ checked }) => checked !== false)\n}\n\nconst clearCheckedNodes = () => {\n checkedNodes.value.forEach((node) => node.doCheck(false))\n calculateCheckedValue()\n menus.value = menus.value.slice(0, 1)\n expandingNode.value = undefined\n emit('expand-change', [])\n}\n\nconst calculateCheckedValue = () => {\n const { checkStrictly, multiple } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = getCheckedNodes(!checkStrictly)!\n // ensure the original order\n const nodes = sortByOriginalOrder(oldNodes, newNodes)\n const values = nodes.map((node) => node.valueByOption)\n checkedNodes.value = nodes\n checkedValue.value = multiple ? values : (values[0] ?? null)\n}\n\nconst syncCheckedValue = (loaded = false, forced = false) => {\n const { modelValue } = props\n const { lazy, multiple, checkStrictly } = config.value\n const leafOnly = !checkStrictly\n\n if (\n !initialLoaded.value ||\n manualChecked ||\n (!forced && isEqual(modelValue, checkedValue.value))\n )\n return\n\n if (lazy && !loaded) {\n const values: CascaderNodeValue[] = unique(\n flattenDeep(castArray(modelValue as CascaderNodeValue[]))\n )\n const nodes = values\n .map((val) => store?.getNodeByValue(val))\n .filter((node) => !!node && !node.loaded && !node.loading) as Node[]\n\n if (nodes.length) {\n nodes.forEach((node) => {\n lazyLoad(node, () => syncCheckedValue(false, forced))\n })\n } else {\n syncCheckedValue(true, forced)\n }\n } else {\n const values = multiple ? castArray(modelValue) : [modelValue]\n const nodes = unique(\n values.map((val) =>\n store?.getNodeByValue(val as CascaderNodeValue, leafOnly)\n )\n ) as Node[]\n syncMenuState(nodes, forced)\n checkedValue.value = cloneDeep(modelValue ?? undefined)\n }\n}\n\nconst syncMenuState = (\n newCheckedNodes: CascaderNode[],\n reserveExpandingState = true\n) => {\n const { checkStrictly } = config.value\n const oldNodes = checkedNodes.value\n const newNodes = newCheckedNodes.filter(\n (node) => !!node && (checkStrictly || node.isLeaf)\n )\n const oldExpandingNode = store?.getSameNode(expandingNode.value!)\n const newExpandingNode =\n (reserveExpandingState && oldExpandingNode) || newNodes[0]\n\n if (newExpandingNode) {\n newExpandingNode.pathNodes.forEach((node) => expandNode(node, true))\n } else {\n expandingNode.value = undefined\n }\n\n oldNodes.forEach((node) => node.doCheck(false))\n reactive(newNodes).forEach((node) => node.doCheck(true))\n checkedNodes.value = newNodes\n nextTick(scrollToExpandingNode)\n}\n\nconst scrollToExpandingNode = () => {\n if (!isClient) return\n\n menuList.value.forEach((menu) => {\n const menuElement = menu?.$el\n if (menuElement) {\n const container = menuElement.querySelector(\n `.${ns.namespace.value}-scrollbar__wrap`\n )\n let activeNode = menuElement.querySelector(\n `.${ns.b('node')}.in-active-path`\n )\n if (!activeNode) {\n const activeElements = menuElement.querySelectorAll(\n `.${ns.b('node')}.${ns.is('active')}`\n )\n activeNode = activeElements[activeElements.length - 1]\n }\n scrollIntoView(container, activeNode)\n }\n })\n}\n\nwatch(\n () => menus.value.length,\n async (length, previousLength = 0) => {\n if (\n !isClient ||\n !panelRef.value ||\n length <= 1 ||\n length <= previousLength\n ) {\n return\n }\n\n await nextTick()\n panelRef.value.scrollLeft = panelRef.value.scrollWidth\n }\n)\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n const code = getEventCode(e)\n\n switch (code) {\n case EVENT_CODE.up:\n case EVENT_CODE.down: {\n e.preventDefault()\n const distance = code === EVENT_CODE.up ? -1 : 1\n focusNode(\n getSibling(\n target,\n distance,\n `.${ns.b('node')}[tabindex=\"-1\"]`\n ) as HTMLElement\n )\n break\n }\n case EVENT_CODE.left: {\n e.preventDefault()\n const preMenu = menuList.value[getMenuIndex(target) - 1]\n const expandedNode = preMenu?.$el.querySelector(\n `.${ns.b('node')}[aria-expanded=\"true\"]`\n )\n focusNode(expandedNode)\n break\n }\n case EVENT_CODE.right: {\n e.preventDefault()\n const nextMenu = menuList.value[getMenuIndex(target) + 1]\n const firstNode = nextMenu?.$el.querySelector(\n `.${ns.b('node')}[tabindex=\"-1\"]`\n )\n focusNode(firstNode)\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n checkNode(target)\n break\n }\n}\n\nprovide(\n CASCADER_PANEL_INJECTION_KEY,\n reactive({\n config,\n expandingNode,\n checkedNodes,\n isHoverMenu,\n initialLoaded,\n renderLabelFn,\n lazyLoad,\n expandNode,\n handleCheckChange,\n })\n)\n\nwatch(\n config,\n (newVal, oldVal) => {\n if (isEqual(newVal, oldVal)) return\n initStore()\n },\n {\n immediate: true,\n }\n)\n\nwatch(() => props.options, initStore, {\n deep: true,\n})\n\nwatch(\n () => props.modelValue,\n () => {\n manualChecked = false\n syncCheckedValue()\n },\n {\n deep: true,\n }\n)\n\nwatch(\n () => checkedValue.value,\n (val) => {\n if (!isEqual(val, props.modelValue)) {\n emit(UPDATE_MODEL_EVENT, val)\n emit(CHANGE_EVENT, val)\n }\n }\n)\n\nconst loadLazyRootNodes = () => {\n if (initialLoadedOnce.value) return\n initStore()\n}\n\nonBeforeUpdate(() => (menuList.value = []))\n\nonMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())\n\ndefineExpose({\n menuList,\n menus,\n checkedNodes,\n handleKeyDown,\n handleCheckChange,\n getFlattedNodes,\n /**\n * @description get an array of currently selected node,(leafOnly) whether only return the leaf checked nodes, default is `false`\n */\n getCheckedNodes,\n /**\n * @description clear checked nodes\n */\n clearCheckedNodes,\n calculateCheckedValue,\n scrollToExpandingNode,\n loadLazyRootNodes,\n})\n</script>\n"],"mappings":""}
|