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
|
@@ -6,7 +6,6 @@ import { getEventCode } from "../../../utils/dom/event.mjs";
|
|
|
6
6
|
import { isPromise } from "../../../utils/types.mjs";
|
|
7
7
|
import { debugWarn } from "../../../utils/error.mjs";
|
|
8
8
|
import { ArrowDown, Check } from "../../../utils/vue/builtin-icons.mjs";
|
|
9
|
-
import ClickOutside from "../../../directives/click-outside/index.mjs";
|
|
10
9
|
import { useLocale } from "../../../hooks/use-locale/index.mjs";
|
|
11
10
|
import { useNamespace } from "../../../hooks/use-namespace/index.mjs";
|
|
12
11
|
import { useFocusController } from "../../../hooks/use-focus-controller/index.mjs";
|
|
@@ -19,6 +18,7 @@ import { useFormItem } from "../../form/src/hooks/use-form-item.mjs";
|
|
|
19
18
|
import { ElTooltip } from "../../tooltip/index.mjs";
|
|
20
19
|
import { ElInput } from "../../input/index.mjs";
|
|
21
20
|
import { ElScrollbar } from "../../scrollbar/index.mjs";
|
|
21
|
+
import ClickOutside from "../../../directives/click-outside/index.mjs";
|
|
22
22
|
import { ElTag } from "../../tag/index.mjs";
|
|
23
23
|
import { ElCascaderPanel } from "../../cascader-panel/index.mjs";
|
|
24
24
|
import { cascaderEmits, cascaderProps } from "./cascader.mjs";
|
|
@@ -35,22 +35,6 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
35
35
|
props: cascaderProps,
|
|
36
36
|
emits: 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 = useAttrs();
|
|
@@ -102,6 +86,11 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
102
86
|
const tagSize = computed(() => realSize.value === "small" ? "small" : "default");
|
|
103
87
|
const multiple = computed(() => !!props.props.multiple);
|
|
104
88
|
const readonly = computed(() => !props.filterable || multiple.value);
|
|
89
|
+
const panelProps = computed(() => ({
|
|
90
|
+
...props.props,
|
|
91
|
+
expandTrigger: "click",
|
|
92
|
+
hoverThreshold: 0
|
|
93
|
+
}));
|
|
105
94
|
const searchKeyword = computed(() => multiple.value ? searchInputValue.value : inputValue.value);
|
|
106
95
|
const checkedNodes = computed(() => cascaderPanelRef.value?.checkedNodes || []);
|
|
107
96
|
const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {
|
|
@@ -397,17 +386,14 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
397
386
|
ref_key: "tooltipRef",
|
|
398
387
|
ref: tooltipRef,
|
|
399
388
|
visible: popperVisible.value,
|
|
400
|
-
teleported: __props.teleported,
|
|
401
389
|
"popper-class": [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: `${unref(nsCascader).namespace.value}-
|
|
409
|
-
effect: __props.effect,
|
|
393
|
+
"show-arrow": false,
|
|
394
|
+
transition: `${unref(nsCascader).namespace.value}-fade-in-linear`,
|
|
410
395
|
pure: "",
|
|
396
|
+
teleported: "",
|
|
411
397
|
persistent: __props.persistent,
|
|
412
398
|
onHide: hideSuggestionPanel
|
|
413
399
|
}, {
|
|
@@ -504,16 +490,10 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
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: withCtx(() => [createVNode(unref(ElTag), {
|
|
@@ -564,7 +544,6 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
564
544
|
"disabled",
|
|
565
545
|
"popper-class",
|
|
566
546
|
"popper-style",
|
|
567
|
-
"effect",
|
|
568
547
|
"persistent"
|
|
569
548
|
])) : createCommentVNode("v-if", true),
|
|
570
549
|
__props.filterable && !unref(isDisabled) ? withDirectives((openBlock(), createElementBlock("input", {
|
|
@@ -597,7 +576,7 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
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,
|
|
@@ -642,13 +621,9 @@ var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
|
|
|
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.mjs","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.mjs","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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascader2.mjs","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.mjs","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.mjs","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.mjs","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":""}
|
|
@@ -33,6 +33,7 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
33
33
|
const initialLoaded = ref(true);
|
|
34
34
|
const initialLoadedOnce = ref(false);
|
|
35
35
|
const menuList = ref([]);
|
|
36
|
+
const panelRef = ref();
|
|
36
37
|
const checkedValue = ref();
|
|
37
38
|
const menus = ref([]);
|
|
38
39
|
const expandingNode = ref();
|
|
@@ -172,6 +173,11 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
172
173
|
}
|
|
173
174
|
});
|
|
174
175
|
};
|
|
176
|
+
watch(() => menus.value.length, async (length, previousLength = 0) => {
|
|
177
|
+
if (!isClient || !panelRef.value || length <= 1 || length <= previousLength) return;
|
|
178
|
+
await nextTick();
|
|
179
|
+
panelRef.value.scrollLeft = panelRef.value.scrollWidth;
|
|
180
|
+
});
|
|
175
181
|
const handleKeyDown = (e) => {
|
|
176
182
|
const target = e.target;
|
|
177
183
|
const code = getEventCode(e);
|
|
@@ -246,6 +252,8 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
246
252
|
});
|
|
247
253
|
return (_ctx, _cache) => {
|
|
248
254
|
return openBlock(), createElementBlock("div", {
|
|
255
|
+
ref_key: "panelRef",
|
|
256
|
+
ref: panelRef,
|
|
249
257
|
class: normalizeClass([unref(ns).b("panel"), unref(ns).is("bordered", __props.border)]),
|
|
250
258
|
onKeydown: handleKeyDown
|
|
251
259
|
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(menus.value, (menu, index) => {
|