@element-plus/nightly 0.0.20260310 → 0.0.20260312
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/attributes.json +1 -1
- package/dist/index.full.js +47 -19
- package/dist/index.full.min.js +6 -6
- package/dist/index.full.min.js.map +1 -1
- package/dist/index.full.min.mjs +6 -6
- package/dist/index.full.min.mjs.map +1 -1
- package/dist/index.full.mjs +47 -19
- package/dist/locale/af.js +1 -1
- package/dist/locale/af.min.js +1 -1
- package/dist/locale/af.min.mjs +1 -1
- package/dist/locale/af.mjs +1 -1
- package/dist/locale/ar-eg.js +1 -1
- package/dist/locale/ar-eg.min.js +1 -1
- package/dist/locale/ar-eg.min.mjs +1 -1
- package/dist/locale/ar-eg.mjs +1 -1
- package/dist/locale/ar.js +1 -1
- package/dist/locale/ar.min.js +1 -1
- package/dist/locale/ar.min.mjs +1 -1
- package/dist/locale/ar.mjs +1 -1
- package/dist/locale/az.js +1 -1
- package/dist/locale/az.min.js +1 -1
- package/dist/locale/az.min.mjs +1 -1
- package/dist/locale/az.mjs +1 -1
- package/dist/locale/bg.js +1 -1
- package/dist/locale/bg.min.js +1 -1
- package/dist/locale/bg.min.mjs +1 -1
- package/dist/locale/bg.mjs +1 -1
- package/dist/locale/bn.js +1 -1
- package/dist/locale/bn.min.js +1 -1
- package/dist/locale/bn.min.mjs +1 -1
- package/dist/locale/bn.mjs +1 -1
- package/dist/locale/ca.js +1 -1
- package/dist/locale/ca.min.js +1 -1
- package/dist/locale/ca.min.mjs +1 -1
- package/dist/locale/ca.mjs +1 -1
- package/dist/locale/ckb.js +1 -1
- package/dist/locale/ckb.min.js +1 -1
- package/dist/locale/ckb.min.mjs +1 -1
- package/dist/locale/ckb.mjs +1 -1
- package/dist/locale/cs.js +1 -1
- package/dist/locale/cs.min.js +1 -1
- package/dist/locale/cs.min.mjs +1 -1
- package/dist/locale/cs.mjs +1 -1
- package/dist/locale/da.js +1 -1
- package/dist/locale/da.min.js +1 -1
- package/dist/locale/da.min.mjs +1 -1
- package/dist/locale/da.mjs +1 -1
- package/dist/locale/de.js +1 -1
- package/dist/locale/de.min.js +1 -1
- package/dist/locale/de.min.mjs +1 -1
- package/dist/locale/de.mjs +1 -1
- package/dist/locale/el.js +1 -1
- package/dist/locale/el.min.js +1 -1
- package/dist/locale/el.min.mjs +1 -1
- package/dist/locale/el.mjs +1 -1
- package/dist/locale/en.js +1 -1
- package/dist/locale/en.min.js +1 -1
- package/dist/locale/en.min.mjs +1 -1
- package/dist/locale/en.mjs +1 -1
- package/dist/locale/eo.js +1 -1
- package/dist/locale/eo.min.js +1 -1
- package/dist/locale/eo.min.mjs +1 -1
- package/dist/locale/eo.mjs +1 -1
- package/dist/locale/es.js +1 -1
- package/dist/locale/es.min.js +1 -1
- package/dist/locale/es.min.mjs +1 -1
- package/dist/locale/es.mjs +1 -1
- package/dist/locale/et.js +1 -1
- package/dist/locale/et.min.js +1 -1
- package/dist/locale/et.min.mjs +1 -1
- package/dist/locale/et.mjs +1 -1
- package/dist/locale/eu.js +1 -1
- package/dist/locale/eu.min.js +1 -1
- package/dist/locale/eu.min.mjs +1 -1
- package/dist/locale/eu.mjs +1 -1
- package/dist/locale/fa.js +1 -1
- package/dist/locale/fa.min.js +1 -1
- package/dist/locale/fa.min.mjs +1 -1
- package/dist/locale/fa.mjs +1 -1
- package/dist/locale/fi.js +1 -1
- package/dist/locale/fi.min.js +1 -1
- package/dist/locale/fi.min.mjs +1 -1
- package/dist/locale/fi.mjs +1 -1
- package/dist/locale/fr.js +1 -1
- package/dist/locale/fr.min.js +1 -1
- package/dist/locale/fr.min.mjs +1 -1
- package/dist/locale/fr.mjs +1 -1
- package/dist/locale/he.js +1 -1
- package/dist/locale/he.min.js +1 -1
- package/dist/locale/he.min.mjs +1 -1
- package/dist/locale/he.mjs +1 -1
- package/dist/locale/hi.js +1 -1
- package/dist/locale/hi.min.js +1 -1
- package/dist/locale/hi.min.mjs +1 -1
- package/dist/locale/hi.mjs +1 -1
- package/dist/locale/hr.js +1 -1
- package/dist/locale/hr.min.js +1 -1
- package/dist/locale/hr.min.mjs +1 -1
- package/dist/locale/hr.mjs +1 -1
- package/dist/locale/hu.js +1 -1
- package/dist/locale/hu.min.js +1 -1
- package/dist/locale/hu.min.mjs +1 -1
- package/dist/locale/hu.mjs +1 -1
- package/dist/locale/hy-am.js +1 -1
- package/dist/locale/hy-am.min.js +1 -1
- package/dist/locale/hy-am.min.mjs +1 -1
- package/dist/locale/hy-am.mjs +1 -1
- package/dist/locale/id.js +1 -1
- package/dist/locale/id.min.js +1 -1
- package/dist/locale/id.min.mjs +1 -1
- package/dist/locale/id.mjs +1 -1
- package/dist/locale/it.js +1 -1
- package/dist/locale/it.min.js +1 -1
- package/dist/locale/it.min.mjs +1 -1
- package/dist/locale/it.mjs +1 -1
- package/dist/locale/ja.js +1 -1
- package/dist/locale/ja.min.js +1 -1
- package/dist/locale/ja.min.mjs +1 -1
- package/dist/locale/ja.mjs +1 -1
- package/dist/locale/kk.js +1 -1
- package/dist/locale/kk.min.js +1 -1
- package/dist/locale/kk.min.mjs +1 -1
- package/dist/locale/kk.mjs +1 -1
- package/dist/locale/km.js +1 -1
- package/dist/locale/km.min.js +1 -1
- package/dist/locale/km.min.mjs +1 -1
- package/dist/locale/km.mjs +1 -1
- package/dist/locale/ko.js +1 -1
- package/dist/locale/ko.min.js +1 -1
- package/dist/locale/ko.min.mjs +1 -1
- package/dist/locale/ko.mjs +1 -1
- package/dist/locale/ku.js +1 -1
- package/dist/locale/ku.min.js +1 -1
- package/dist/locale/ku.min.mjs +1 -1
- package/dist/locale/ku.mjs +1 -1
- package/dist/locale/ky.js +1 -1
- package/dist/locale/ky.min.js +1 -1
- package/dist/locale/ky.min.mjs +1 -1
- package/dist/locale/ky.mjs +1 -1
- package/dist/locale/lo.js +1 -1
- package/dist/locale/lo.min.js +1 -1
- package/dist/locale/lo.min.mjs +1 -1
- package/dist/locale/lo.mjs +1 -1
- package/dist/locale/lt.js +1 -1
- package/dist/locale/lt.min.js +1 -1
- package/dist/locale/lt.min.mjs +1 -1
- package/dist/locale/lt.mjs +1 -1
- package/dist/locale/lv.js +1 -1
- package/dist/locale/lv.min.js +1 -1
- package/dist/locale/lv.min.mjs +1 -1
- package/dist/locale/lv.mjs +1 -1
- package/dist/locale/mg.js +1 -1
- package/dist/locale/mg.min.js +1 -1
- package/dist/locale/mg.min.mjs +1 -1
- package/dist/locale/mg.mjs +1 -1
- package/dist/locale/mn.js +1 -1
- package/dist/locale/mn.min.js +1 -1
- package/dist/locale/mn.min.mjs +1 -1
- package/dist/locale/mn.mjs +1 -1
- package/dist/locale/ms.js +1 -1
- package/dist/locale/ms.min.js +1 -1
- package/dist/locale/ms.min.mjs +1 -1
- package/dist/locale/ms.mjs +1 -1
- package/dist/locale/my.js +1 -1
- package/dist/locale/my.min.js +1 -1
- package/dist/locale/my.min.mjs +1 -1
- package/dist/locale/my.mjs +1 -1
- package/dist/locale/nb-no.js +1 -1
- package/dist/locale/nb-no.min.js +1 -1
- package/dist/locale/nb-no.min.mjs +1 -1
- package/dist/locale/nb-no.mjs +1 -1
- package/dist/locale/nl.js +1 -1
- package/dist/locale/nl.min.js +1 -1
- package/dist/locale/nl.min.mjs +1 -1
- package/dist/locale/nl.mjs +1 -1
- package/dist/locale/no.js +1 -1
- package/dist/locale/no.min.js +1 -1
- package/dist/locale/no.min.mjs +1 -1
- package/dist/locale/no.mjs +1 -1
- package/dist/locale/pa.js +1 -1
- package/dist/locale/pa.min.js +1 -1
- package/dist/locale/pa.min.mjs +1 -1
- package/dist/locale/pa.mjs +1 -1
- package/dist/locale/pl.js +1 -1
- package/dist/locale/pl.min.js +1 -1
- package/dist/locale/pl.min.mjs +1 -1
- package/dist/locale/pl.mjs +1 -1
- package/dist/locale/pt-br.js +1 -1
- package/dist/locale/pt-br.min.js +1 -1
- package/dist/locale/pt-br.min.mjs +1 -1
- package/dist/locale/pt-br.mjs +1 -1
- package/dist/locale/pt.js +1 -1
- package/dist/locale/pt.min.js +1 -1
- package/dist/locale/pt.min.mjs +1 -1
- package/dist/locale/pt.mjs +1 -1
- package/dist/locale/ro.js +1 -1
- package/dist/locale/ro.min.js +1 -1
- package/dist/locale/ro.min.mjs +1 -1
- package/dist/locale/ro.mjs +1 -1
- package/dist/locale/ru.js +1 -1
- package/dist/locale/ru.min.js +1 -1
- package/dist/locale/ru.min.mjs +1 -1
- package/dist/locale/ru.mjs +1 -1
- package/dist/locale/sk.js +1 -1
- package/dist/locale/sk.min.js +1 -1
- package/dist/locale/sk.min.mjs +1 -1
- package/dist/locale/sk.mjs +1 -1
- package/dist/locale/sl.js +1 -1
- package/dist/locale/sl.min.js +1 -1
- package/dist/locale/sl.min.mjs +1 -1
- package/dist/locale/sl.mjs +1 -1
- package/dist/locale/sr.js +1 -1
- package/dist/locale/sr.min.js +1 -1
- package/dist/locale/sr.min.mjs +1 -1
- package/dist/locale/sr.mjs +1 -1
- package/dist/locale/sv.js +1 -1
- package/dist/locale/sv.min.js +1 -1
- package/dist/locale/sv.min.mjs +1 -1
- package/dist/locale/sv.mjs +1 -1
- package/dist/locale/sw.js +1 -1
- package/dist/locale/sw.min.js +1 -1
- package/dist/locale/sw.min.mjs +1 -1
- package/dist/locale/sw.mjs +1 -1
- package/dist/locale/ta.js +1 -1
- package/dist/locale/ta.min.js +1 -1
- package/dist/locale/ta.min.mjs +1 -1
- package/dist/locale/ta.mjs +1 -1
- package/dist/locale/te.js +1 -1
- package/dist/locale/te.min.js +1 -1
- package/dist/locale/te.min.mjs +1 -1
- package/dist/locale/te.mjs +1 -1
- package/dist/locale/th.js +1 -1
- package/dist/locale/th.min.js +1 -1
- package/dist/locale/th.min.mjs +1 -1
- package/dist/locale/th.mjs +1 -1
- package/dist/locale/tk.js +1 -1
- package/dist/locale/tk.min.js +1 -1
- package/dist/locale/tk.min.mjs +1 -1
- package/dist/locale/tk.mjs +1 -1
- package/dist/locale/tr.js +1 -1
- package/dist/locale/tr.min.js +1 -1
- package/dist/locale/tr.min.mjs +1 -1
- package/dist/locale/tr.mjs +1 -1
- package/dist/locale/ug-cn.js +1 -1
- package/dist/locale/ug-cn.min.js +1 -1
- package/dist/locale/ug-cn.min.mjs +1 -1
- package/dist/locale/ug-cn.mjs +1 -1
- package/dist/locale/uk.js +1 -1
- package/dist/locale/uk.min.js +1 -1
- package/dist/locale/uk.min.mjs +1 -1
- package/dist/locale/uk.mjs +1 -1
- package/dist/locale/uz-uz.js +1 -1
- package/dist/locale/uz-uz.min.js +1 -1
- package/dist/locale/uz-uz.min.mjs +1 -1
- package/dist/locale/uz-uz.mjs +1 -1
- package/dist/locale/vi.js +1 -1
- package/dist/locale/vi.min.js +1 -1
- package/dist/locale/vi.min.mjs +1 -1
- package/dist/locale/vi.mjs +1 -1
- package/dist/locale/zh-cn.js +1 -1
- package/dist/locale/zh-cn.min.js +1 -1
- package/dist/locale/zh-cn.min.mjs +1 -1
- package/dist/locale/zh-cn.mjs +1 -1
- package/dist/locale/zh-hk.js +1 -1
- package/dist/locale/zh-hk.min.js +1 -1
- package/dist/locale/zh-hk.min.mjs +1 -1
- package/dist/locale/zh-hk.mjs +1 -1
- package/dist/locale/zh-mo.js +1 -1
- package/dist/locale/zh-mo.min.js +1 -1
- package/dist/locale/zh-mo.min.mjs +1 -1
- package/dist/locale/zh-mo.mjs +1 -1
- package/dist/locale/zh-tw.js +1 -1
- package/dist/locale/zh-tw.min.js +1 -1
- package/dist/locale/zh-tw.min.mjs +1 -1
- package/dist/locale/zh-tw.mjs +1 -1
- package/es/components/alert/src/alert.vue.d.ts +1 -1
- package/es/components/anchor/src/anchor.vue.d.ts +1 -1
- package/es/components/autocomplete/src/autocomplete.vue.d.ts +1 -1
- package/es/components/badge/src/badge.vue.d.ts +1 -1
- package/es/components/carousel/src/carousel.vue.d.ts +1 -1
- package/es/components/cascader/src/cascader.vue.d.ts +2 -2
- package/es/components/cascader-panel/src/index.vue.d.ts +2 -2
- package/es/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
- package/es/components/col/src/col.vue.d.ts +1 -1
- package/es/components/color-picker-panel/src/color-picker-panel.d.ts +23 -1
- package/es/components/color-picker-panel/src/color-picker-panel.mjs +11 -1
- package/es/components/color-picker-panel/src/color-picker-panel.mjs.map +1 -1
- package/es/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.mjs +10 -4
- package/es/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/color-picker-panel/src/color-picker-panel2.mjs.map +1 -1
- package/es/components/dialog/src/dialog.vue.d.ts +2 -2
- package/es/components/drawer/src/drawer.vue.d.ts +2 -2
- package/es/components/dropdown/src/dropdown.vue.d.ts +1 -1
- package/es/components/image/src/image.vue.d.ts +8 -8
- package/es/components/image-viewer/src/image-viewer.vue.d.ts +4 -4
- package/es/components/input/src/input.vue.d.ts +6 -2
- package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs +2 -2
- package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
- package/es/components/input/src/input2.mjs.map +1 -1
- package/es/components/link/src/link.vue.d.ts +1 -1
- package/es/components/mention/src/helper.mjs +1 -1
- package/es/components/mention/src/helper.mjs.map +1 -1
- package/es/components/mention/src/mention.vue.d.ts +2 -2
- package/es/components/message/src/message.d.ts +1 -1
- package/es/components/message/src/message.vue.d.ts +4 -4
- package/es/components/notification/src/notification.d.ts +1 -1
- package/es/components/notification/src/notification.vue.d.ts +2 -2
- package/es/components/pagination/src/pagination.d.ts +1 -1
- package/es/components/popconfirm/src/popconfirm.vue.d.ts +1 -1
- package/es/components/popover/src/popover.vue.d.ts +2 -2
- package/es/components/popper/src/content.vue.d.ts +1 -1
- package/es/components/radio/src/radio-group.vue.d.ts +1 -1
- package/es/components/select/src/select.vue.d.ts +3 -3
- package/es/components/select-v2/src/select.vue.d.ts +3 -3
- package/es/components/table/src/store/tree.mjs +1 -1
- package/es/components/table/src/store/tree.mjs.map +1 -1
- package/es/components/table/src/table-column/index.d.ts +1 -1
- package/es/components/table/src/table.vue.d.ts +2 -2
- package/es/components/tabs/src/tab-nav.mjs +16 -4
- package/es/components/tabs/src/tab-nav.mjs.map +1 -1
- package/es/components/tooltip/src/content.vue.d.ts +2 -2
- package/es/components/tooltip/src/tooltip.vue.d.ts +2 -2
- package/es/components/tour/src/tour.vue.d.ts +3 -3
- package/es/components/tree-select/src/tree-select.vue.d.ts +3 -3
- package/es/components/tree-v2/src/composables/useTree.mjs +5 -5
- package/es/components/tree-v2/src/composables/useTree.mjs.map +1 -1
- package/es/components/upload/src/upload-content.vue.d.ts +1 -1
- package/es/components/upload/src/upload.vue.d.ts +1 -1
- package/es/components/watermark/src/watermark.vue.d.ts +1 -1
- package/es/version.mjs +1 -1
- package/es/version.mjs.map +1 -1
- package/lib/components/alert/src/alert.vue.d.ts +1 -1
- package/lib/components/anchor/src/anchor.vue.d.ts +1 -1
- package/lib/components/autocomplete/src/autocomplete.vue.d.ts +1 -1
- package/lib/components/badge/src/badge.vue.d.ts +1 -1
- package/lib/components/carousel/src/carousel.vue.d.ts +1 -1
- package/lib/components/cascader/src/cascader.vue.d.ts +2 -2
- package/lib/components/cascader-panel/src/index.vue.d.ts +2 -2
- package/lib/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
- package/lib/components/col/src/col.vue.d.ts +1 -1
- package/lib/components/color-picker-panel/src/color-picker-panel.d.ts +23 -1
- package/lib/components/color-picker-panel/src/color-picker-panel.js +11 -1
- package/lib/components/color-picker-panel/src/color-picker-panel.js.map +1 -1
- package/lib/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.js +9 -3
- package/lib/components/color-picker-panel/src/color-picker-panel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/color-picker-panel/src/color-picker-panel2.js.map +1 -1
- package/lib/components/dialog/src/dialog.vue.d.ts +2 -2
- package/lib/components/drawer/src/drawer.vue.d.ts +2 -2
- package/lib/components/dropdown/src/dropdown.vue.d.ts +1 -1
- package/lib/components/image/src/image.vue.d.ts +8 -8
- package/lib/components/image-viewer/src/image-viewer.vue.d.ts +4 -4
- package/lib/components/input/src/input.vue.d.ts +6 -2
- package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js +2 -2
- package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/lib/components/input/src/input2.js.map +1 -1
- package/lib/components/link/src/link.vue.d.ts +1 -1
- package/lib/components/mention/src/helper.js +1 -1
- package/lib/components/mention/src/helper.js.map +1 -1
- package/lib/components/mention/src/mention.vue.d.ts +2 -2
- package/lib/components/message/src/message.d.ts +1 -1
- package/lib/components/message/src/message.vue.d.ts +4 -4
- package/lib/components/notification/src/notification.d.ts +1 -1
- package/lib/components/notification/src/notification.vue.d.ts +2 -2
- package/lib/components/pagination/src/pagination.d.ts +1 -1
- package/lib/components/popconfirm/src/popconfirm.vue.d.ts +1 -1
- package/lib/components/popover/src/popover.vue.d.ts +2 -2
- package/lib/components/popper/src/content.vue.d.ts +1 -1
- package/lib/components/radio/src/radio-group.vue.d.ts +1 -1
- package/lib/components/select/src/select.vue.d.ts +3 -3
- package/lib/components/select-v2/src/select.vue.d.ts +3 -3
- package/lib/components/table/src/store/tree.js +1 -1
- package/lib/components/table/src/store/tree.js.map +1 -1
- package/lib/components/table/src/table-column/index.d.ts +1 -1
- package/lib/components/table/src/table.vue.d.ts +2 -2
- package/lib/components/tabs/src/tab-nav.js +16 -4
- package/lib/components/tabs/src/tab-nav.js.map +1 -1
- package/lib/components/tooltip/src/content.vue.d.ts +2 -2
- package/lib/components/tooltip/src/tooltip.vue.d.ts +2 -2
- package/lib/components/tour/src/tour.vue.d.ts +3 -3
- package/lib/components/tree-select/src/tree-select.vue.d.ts +3 -3
- package/lib/components/tree-v2/src/composables/useTree.js +5 -5
- package/lib/components/tree-v2/src/composables/useTree.js.map +1 -1
- package/lib/components/upload/src/upload-content.vue.d.ts +1 -1
- package/lib/components/upload/src/upload.vue.d.ts +1 -1
- package/lib/components/watermark/src/watermark.vue.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +2 -2
- package/tags.json +1 -1
- package/web-types.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","names":["isFirefox"],"sources":["../../../../../../packages/components/mention/src/helper.ts"],"sourcesContent":["import { ensureArray, isFirefox } from '@element-plus/utils'\n\nimport type { MentionCtx, MentionOption } from './types'\n\nexport const filterOption = (\n pattern: string,\n option: MentionOption\n): boolean => {\n const lowerCase = pattern.toLowerCase()\n const label = option.label || option.value || ''\n return label.toLowerCase().includes(lowerCase)\n}\n\nexport const getMentionCtx = (\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n prefix: string | string[],\n split: string\n) => {\n const { selectionEnd } = inputEl\n if (selectionEnd === null) return\n const inputValue = inputEl.value\n const prefixArray = ensureArray(prefix)\n let splitIndex = -1\n let mentionCtx: MentionCtx | undefined\n for (let i = selectionEnd - 1; i >= 0; --i) {\n const char = inputValue[i]\n if (char === split || char === '\\n' || char === '\\r') {\n splitIndex = i\n continue\n }\n if (prefixArray.includes(char)) {\n const end = splitIndex === -1 ? selectionEnd : splitIndex\n const pattern = inputValue.slice(i + 1, end)\n mentionCtx = {\n pattern,\n start: i + 1,\n end,\n prefix: char,\n prefixIndex: i,\n splitIndex,\n selectionEnd,\n }\n break\n }\n }\n return mentionCtx\n}\n\n/**\n * fork from textarea-caret-position\n * https://github.com/component/textarea-caret-position\n * The MIT License (MIT)\n * Copyright (c) 2015 Jonathan Ong me@jongleberry.com\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nexport const getCursorPosition = (\n element: HTMLInputElement | HTMLTextAreaElement,\n options = {\n debug: false,\n useSelectionEnd: false,\n }\n) => {\n const selectionStart =\n element.selectionStart !== null ? element.selectionStart : 0\n const selectionEnd = element.selectionEnd !== null ? element.selectionEnd : 0\n const position = options.useSelectionEnd ? selectionEnd : selectionStart\n // We'll copy the properties below into the mirror div.\n // Note that some browsers, such as Firefox, do not concatenate properties\n // into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n // so we have to list every single property explicitly.\n const properties: string[] = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n 'letterSpacing',\n 'wordSpacing',\n 'tabSize',\n 'MozTabSize',\n ]\n\n if (options.debug) {\n const el = document.querySelector(\n '#input-textarea-caret-position-mirror-div'\n )\n if (el?.parentNode) el.parentNode.removeChild(el)\n }\n\n // The mirror div will replicate the textareas style\n const div = document.createElement('div')\n div.id = 'input-textarea-caret-position-mirror-div'\n document.body.appendChild(div)\n\n const style = div.style\n const computed = window.getComputedStyle(element)\n\n const isInput = element.nodeName === 'INPUT'\n\n // Default textarea styles\n style.whiteSpace = isInput ? 'nowrap' : 'pre-wrap'\n if (!isInput) style.wordWrap = 'break-word' // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute' // required to return coordinates properly\n if (!options.debug) style.visibility = 'hidden' // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach((prop) => {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = Number.parseInt(computed.height as string)\n const outerHeight =\n Number.parseInt(computed.paddingTop as string) +\n Number.parseInt(computed.paddingBottom as string) +\n Number.parseInt(computed.borderTopWidth as string) +\n Number.parseInt(computed.borderBottomWidth as string)\n const targetHeight =\n outerHeight + Number.parseInt(computed.lineHeight as string)\n if (height > targetHeight) {\n style.lineHeight = `${height - outerHeight}px`\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight\n } else {\n style.lineHeight = '0'\n }\n } else {\n style.lineHeight = computed.height\n }\n } else {\n style[prop as any] = computed[prop as any]\n }\n })\n\n if (isFirefox()) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > Number.parseInt(computed.height as string)) {\n style.overflowY = 'scroll'\n }\n } else {\n style.overflow = 'hidden' // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.slice(0, Math.max(0, position))\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput && div.textContent) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00A0')\n }\n\n const span = document.createElement('span')\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textareas content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.slice(Math.max(0, position)) || '.' // || because a completely empty faux span doesn't render at all\n span.style.position = 'relative'\n span.style.left = `${-element.scrollLeft}px`\n span.style.top = `${-element.scrollTop}px`\n div.appendChild(span)\n\n const relativePosition = {\n top: span.offsetTop + Number.parseInt(computed.borderTopWidth as string),\n left: span.offsetLeft + Number.parseInt(computed.borderLeftWidth as string),\n // We don't use line-height since it may be too large for position. Eg. 34px\n // for input\n height: Number.parseInt(computed.fontSize as string) * 1.5,\n }\n\n if (options.debug) {\n span.style.backgroundColor = '#aaa'\n } else {\n document.body.removeChild(div)\n }\n\n if (relativePosition.left >= element.clientWidth) {\n relativePosition.left = element.clientWidth\n }\n return relativePosition\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helper.js","names":["isFirefox"],"sources":["../../../../../../packages/components/mention/src/helper.ts"],"sourcesContent":["import { ensureArray, isFirefox } from '@element-plus/utils'\n\nimport type { MentionCtx, MentionOption } from './types'\n\nexport const filterOption = (\n pattern: string,\n option: MentionOption\n): boolean => {\n const lowerCase = pattern.toLowerCase()\n const label = option.label || option.value || ''\n return label.toLowerCase().includes(lowerCase)\n}\n\nexport const getMentionCtx = (\n inputEl: HTMLInputElement | HTMLTextAreaElement,\n prefix: string | string[],\n split: string\n) => {\n const { selectionEnd } = inputEl\n if (selectionEnd === null) return\n const inputValue = inputEl.value\n const prefixArray = ensureArray(prefix)\n let splitIndex = -1\n let mentionCtx: MentionCtx | undefined\n for (let i = selectionEnd - 1; i >= 0; --i) {\n const char = inputValue[i]\n if (\n splitIndex === -1 &&\n (char === split || char === '\\n' || char === '\\r')\n ) {\n splitIndex = i\n continue\n }\n if (prefixArray.includes(char)) {\n const end = splitIndex === -1 ? selectionEnd : splitIndex\n const pattern = inputValue.slice(i + 1, end)\n mentionCtx = {\n pattern,\n start: i + 1,\n end,\n prefix: char,\n prefixIndex: i,\n splitIndex,\n selectionEnd,\n }\n break\n }\n }\n return mentionCtx\n}\n\n/**\n * fork from textarea-caret-position\n * https://github.com/component/textarea-caret-position\n * The MIT License (MIT)\n * Copyright (c) 2015 Jonathan Ong me@jongleberry.com\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nexport const getCursorPosition = (\n element: HTMLInputElement | HTMLTextAreaElement,\n options = {\n debug: false,\n useSelectionEnd: false,\n }\n) => {\n const selectionStart =\n element.selectionStart !== null ? element.selectionStart : 0\n const selectionEnd = element.selectionEnd !== null ? element.selectionEnd : 0\n const position = options.useSelectionEnd ? selectionEnd : selectionStart\n // We'll copy the properties below into the mirror div.\n // Note that some browsers, such as Firefox, do not concatenate properties\n // into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n // so we have to list every single property explicitly.\n const properties: string[] = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n 'letterSpacing',\n 'wordSpacing',\n 'tabSize',\n 'MozTabSize',\n ]\n\n if (options.debug) {\n const el = document.querySelector(\n '#input-textarea-caret-position-mirror-div'\n )\n if (el?.parentNode) el.parentNode.removeChild(el)\n }\n\n // The mirror div will replicate the textareas style\n const div = document.createElement('div')\n div.id = 'input-textarea-caret-position-mirror-div'\n document.body.appendChild(div)\n\n const style = div.style\n const computed = window.getComputedStyle(element)\n\n const isInput = element.nodeName === 'INPUT'\n\n // Default textarea styles\n style.whiteSpace = isInput ? 'nowrap' : 'pre-wrap'\n if (!isInput) style.wordWrap = 'break-word' // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute' // required to return coordinates properly\n if (!options.debug) style.visibility = 'hidden' // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach((prop) => {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = Number.parseInt(computed.height as string)\n const outerHeight =\n Number.parseInt(computed.paddingTop as string) +\n Number.parseInt(computed.paddingBottom as string) +\n Number.parseInt(computed.borderTopWidth as string) +\n Number.parseInt(computed.borderBottomWidth as string)\n const targetHeight =\n outerHeight + Number.parseInt(computed.lineHeight as string)\n if (height > targetHeight) {\n style.lineHeight = `${height - outerHeight}px`\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight\n } else {\n style.lineHeight = '0'\n }\n } else {\n style.lineHeight = computed.height\n }\n } else {\n style[prop as any] = computed[prop as any]\n }\n })\n\n if (isFirefox()) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > Number.parseInt(computed.height as string)) {\n style.overflowY = 'scroll'\n }\n } else {\n style.overflow = 'hidden' // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.slice(0, Math.max(0, position))\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput && div.textContent) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00A0')\n }\n\n const span = document.createElement('span')\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textareas content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.slice(Math.max(0, position)) || '.' // || because a completely empty faux span doesn't render at all\n span.style.position = 'relative'\n span.style.left = `${-element.scrollLeft}px`\n span.style.top = `${-element.scrollTop}px`\n div.appendChild(span)\n\n const relativePosition = {\n top: span.offsetTop + Number.parseInt(computed.borderTopWidth as string),\n left: span.offsetLeft + Number.parseInt(computed.borderLeftWidth as string),\n // We don't use line-height since it may be too large for position. Eg. 34px\n // for input\n height: Number.parseInt(computed.fontSize as string) * 1.5,\n }\n\n if (options.debug) {\n span.style.backgroundColor = '#aaa'\n } else {\n document.body.removeChild(div)\n }\n\n if (relativePosition.left >= element.clientWidth) {\n relativePosition.left = element.clientWidth\n }\n return relativePosition\n}\n"],"mappings":"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"}
|
|
@@ -76,10 +76,10 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
76
76
|
onSearch?: ((pattern: string, prefix: string) => any) | undefined;
|
|
77
77
|
"onWhole-remove"?: ((pattern: string, prefix: string) => any) | undefined;
|
|
78
78
|
}, {
|
|
79
|
-
|
|
79
|
+
offset: number;
|
|
80
80
|
props: MentionOptionProps;
|
|
81
|
+
type: InputType;
|
|
81
82
|
split: string;
|
|
82
|
-
offset: number;
|
|
83
83
|
modelValue: string;
|
|
84
84
|
placement: "bottom" | "top";
|
|
85
85
|
disabled: boolean;
|
|
@@ -134,7 +134,7 @@ declare const messageProps: {
|
|
|
134
134
|
readonly type: EpPropFinalized<StringConstructor, "info" | "primary" | "success" | "warning" | "error", unknown, "info", boolean>;
|
|
135
135
|
readonly plain: EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
|
|
136
136
|
readonly offset: EpPropFinalized<NumberConstructor, unknown, unknown, 16, boolean>;
|
|
137
|
-
readonly placement: EpPropFinalized<StringConstructor, "top" | "bottom" | "top-
|
|
137
|
+
readonly placement: EpPropFinalized<StringConstructor, "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right", unknown, undefined, boolean>;
|
|
138
138
|
readonly zIndex: EpPropFinalized<NumberConstructor, unknown, unknown, 0, boolean>;
|
|
139
139
|
readonly grouping: EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
|
|
140
140
|
readonly repeatNum: EpPropFinalized<NumberConstructor, unknown, unknown, 1, boolean>;
|
|
@@ -27,7 +27,7 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
27
27
|
readonly grouping: false;
|
|
28
28
|
readonly repeatNum: 1;
|
|
29
29
|
readonly appendTo: HTMLElement;
|
|
30
|
-
}>, "
|
|
30
|
+
}>, "zIndex" | "offset" | "type" | "onClose" | "placement" | "id" | "icon" | "plain" | "message" | "showClose" | "duration" | "customClass" | "dangerouslyUseHTMLString" | "grouping" | "repeatNum">>, {
|
|
31
31
|
visible: vue.Ref<boolean>;
|
|
32
32
|
bottom: vue.ComputedRef<number>;
|
|
33
33
|
close: typeof close;
|
|
@@ -50,13 +50,13 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
50
50
|
readonly grouping: false;
|
|
51
51
|
readonly repeatNum: 1;
|
|
52
52
|
readonly appendTo: HTMLElement;
|
|
53
|
-
}>, "
|
|
53
|
+
}>, "zIndex" | "offset" | "type" | "onClose" | "placement" | "id" | "icon" | "plain" | "message" | "showClose" | "duration" | "customClass" | "dangerouslyUseHTMLString" | "grouping" | "repeatNum">>>> & {
|
|
54
54
|
onDestroy?: (() => any) | undefined;
|
|
55
55
|
}, {
|
|
56
|
-
type: MessageType;
|
|
57
|
-
onClose: () => void;
|
|
58
56
|
zIndex: number;
|
|
59
57
|
offset: number;
|
|
58
|
+
type: MessageType;
|
|
59
|
+
onClose: () => void;
|
|
60
60
|
placement: MessagePlacement;
|
|
61
61
|
id: string;
|
|
62
62
|
icon: IconPropType;
|
|
@@ -110,7 +110,7 @@ declare const notificationProps: {
|
|
|
110
110
|
readonly validator: ((val: unknown) => boolean) | undefined;
|
|
111
111
|
__epPropKey: true;
|
|
112
112
|
};
|
|
113
|
-
readonly position: EpPropFinalized<StringConstructor, "top-
|
|
113
|
+
readonly position: EpPropFinalized<StringConstructor, "top-left" | "top-right" | "bottom-left" | "bottom-right", unknown, "top-right", boolean>;
|
|
114
114
|
readonly showClose: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
|
|
115
115
|
readonly title: EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
|
|
116
116
|
readonly type: EpPropFinalized<StringConstructor, "" | "info" | "primary" | "success" | "warning" | "error", unknown, "", boolean>;
|
|
@@ -41,10 +41,10 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
41
41
|
}>>> & {
|
|
42
42
|
onDestroy?: (() => any) | undefined;
|
|
43
43
|
}, {
|
|
44
|
-
title: string;
|
|
45
|
-
type: NotificationType;
|
|
46
44
|
offset: number;
|
|
47
45
|
position: NotificationPosition;
|
|
46
|
+
type: NotificationType;
|
|
47
|
+
title: string;
|
|
48
48
|
id: string;
|
|
49
49
|
onClick: () => void;
|
|
50
50
|
message: string | vue.VNode | (() => vue.VNode);
|
|
@@ -135,8 +135,8 @@ declare const _default: vue.DefineComponent<{
|
|
|
135
135
|
"onPrev-click"?: ((val: number) => any) | undefined;
|
|
136
136
|
"onNext-click"?: ((val: number) => any) | undefined;
|
|
137
137
|
}, {
|
|
138
|
-
readonly small: boolean;
|
|
139
138
|
readonly teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
|
|
139
|
+
readonly small: boolean;
|
|
140
140
|
readonly popperClass: string;
|
|
141
141
|
readonly disabled: boolean;
|
|
142
142
|
readonly layout: string;
|
|
@@ -45,8 +45,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
45
45
|
onCancel?: ((e: MouseEvent) => any) | undefined;
|
|
46
46
|
onConfirm?: ((e: MouseEvent) => any) | undefined;
|
|
47
47
|
}, {
|
|
48
|
-
effect: PopperEffect;
|
|
49
48
|
teleported: boolean;
|
|
49
|
+
effect: PopperEffect;
|
|
50
50
|
icon: IconPropType;
|
|
51
51
|
hideAfter: number;
|
|
52
52
|
width: string | number;
|
|
@@ -71,9 +71,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
71
71
|
"onAfter-enter"?: (() => any) | undefined;
|
|
72
72
|
"onAfter-leave"?: (() => any) | undefined;
|
|
73
73
|
}, {
|
|
74
|
-
effect: PopperEffect;
|
|
75
|
-
teleported: boolean;
|
|
76
74
|
offset: number;
|
|
75
|
+
teleported: boolean;
|
|
76
|
+
effect: PopperEffect;
|
|
77
77
|
placement: Placement;
|
|
78
78
|
popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
|
|
79
79
|
tabindex: string | number;
|
|
@@ -78,8 +78,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
78
78
|
onMouseenter?: ((evt: MouseEvent) => any) | undefined;
|
|
79
79
|
onMouseleave?: ((evt: MouseEvent) => any) | undefined;
|
|
80
80
|
}, {
|
|
81
|
-
effect: PopperEffect;
|
|
82
81
|
offset: number;
|
|
82
|
+
effect: PopperEffect;
|
|
83
83
|
placement: Placement$1;
|
|
84
84
|
popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
|
|
85
85
|
visible: boolean;
|
|
@@ -33,9 +33,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
33
33
|
onChange?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
34
34
|
"onUpdate:modelValue"?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
35
35
|
}, {
|
|
36
|
-
type: "radio" | "button";
|
|
37
36
|
fill: string;
|
|
38
37
|
props: radioOptionProp;
|
|
38
|
+
type: "radio" | "button";
|
|
39
39
|
modelValue: string | number | boolean;
|
|
40
40
|
id: string;
|
|
41
41
|
disabled: boolean;
|
|
@@ -413,10 +413,10 @@ declare const __VLS_export: vue.DefineComponent<{
|
|
|
413
413
|
"onRemove-tag"?: ((...args: any[]) => any) | undefined;
|
|
414
414
|
"onPopup-scroll"?: ((...args: any[]) => any) | undefined;
|
|
415
415
|
}, {
|
|
416
|
-
effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
|
|
417
|
-
props: Props;
|
|
418
|
-
teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
|
|
419
416
|
offset: number;
|
|
417
|
+
teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
|
|
418
|
+
props: Props;
|
|
419
|
+
effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
|
|
420
420
|
valueKey: string;
|
|
421
421
|
modelValue: EpPropMergeType<(new (...args: any[]) => string | number | boolean | Record<string, any> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[]) | (() => EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[] | null) | ((new (...args: any[]) => string | number | boolean | Record<string, any> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[]) | (() => EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[] | null))[], unknown, unknown>;
|
|
422
422
|
debounce: number;
|
|
@@ -600,10 +600,10 @@ declare const __VLS_export: vue.DefineComponent<{
|
|
|
600
600
|
"onVisible-change"?: ((visible: boolean) => any) | undefined;
|
|
601
601
|
"onRemove-tag"?: ((val: unknown) => any) | undefined;
|
|
602
602
|
}, {
|
|
603
|
-
readonly effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
|
|
604
|
-
readonly props: Props;
|
|
605
|
-
readonly teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
|
|
606
603
|
readonly offset: number;
|
|
604
|
+
readonly teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
|
|
605
|
+
readonly props: Props;
|
|
606
|
+
readonly effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
|
|
607
607
|
readonly valueKey: string;
|
|
608
608
|
readonly modelValue: any;
|
|
609
609
|
readonly debounce: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","names":["getRowIdentity","isUndefined"],"sources":["../../../../../../../packages/components/table/src/store/tree.ts"],"sourcesContent":["import { computed, getCurrentInstance, ref, unref, watch } from 'vue'\nimport { isArray, isUndefined } from '@element-plus/utils'\nimport { getRowIdentity, walkTreeNode } from '../util'\n\nimport type { WatcherPropsData } from '.'\nimport type { DefaultRow, Table, TableProps, TreeNode } from '../table/defaults'\n\nexport interface TreeData extends TreeNode {\n children?: string[]\n lazy?: boolean\n loaded?: boolean\n}\n\nfunction useTree<T extends DefaultRow>(watcherData: WatcherPropsData<T>) {\n const expandRowKeys = ref<Array<string>>([])\n const treeData = ref<Record<string, TreeData>>({})\n const indent = ref(16)\n const lazy = ref(false)\n const lazyTreeNodeMap = ref<Record<string, T[]>>({})\n const lazyColumnIdentifier = ref('hasChildren')\n const childrenColumnName = ref('children')\n const checkStrictly = ref(false)\n const instance = getCurrentInstance() as Table<T>\n const normalizedData = computed(() => {\n if (!watcherData.rowKey.value) return {}\n const data = watcherData.data.value || []\n return normalize(data)\n })\n const normalizedLazyNode = computed(() => {\n const rowKey = watcherData.rowKey.value\n const keys = Object.keys(lazyTreeNodeMap.value)\n const res: Record<string, { children: string[] }> = {}\n if (!keys.length) return res\n keys.forEach((key) => {\n if (lazyTreeNodeMap.value[key].length) {\n const item: (typeof res)[number] = { children: [] }\n lazyTreeNodeMap.value[key].forEach((row) => {\n const currentRowKey = getRowIdentity(row, rowKey)\n item.children.push(currentRowKey)\n if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) {\n res[currentRowKey] = { children: [] }\n }\n })\n res[key] = item\n }\n })\n return res\n })\n\n const normalize = (data: T[]) => {\n const rowKey = watcherData.rowKey.value\n const res = {} as Record<string, TreeData>\n walkTreeNode(\n data,\n (parent, children, level) => {\n const parentId = getRowIdentity(parent, rowKey)\n if (isArray(children)) {\n res[parentId] = {\n children: children.map((row) => getRowIdentity(row, rowKey)),\n level,\n }\n } else if (lazy.value) {\n // 当 children 不存在且 lazy 为 true,该节点即为懒加载的节点\n res[parentId] = {\n children: [],\n lazy: true,\n level,\n }\n }\n },\n childrenColumnName.value,\n lazyColumnIdentifier.value,\n lazy.value\n )\n return res\n }\n\n const updateTreeData = (\n ifChangeExpandRowKeys = false,\n ifExpandAll?: boolean\n ) => {\n ifExpandAll ||= instance.store?.states.defaultExpandAll.value\n const nested = normalizedData.value\n const normalizedLazyNode_ = normalizedLazyNode.value\n const keys = Object.keys(nested)\n const newTreeData: Record<string, TreeData> = {}\n if (keys.length) {\n const oldTreeData = unref(treeData)\n const rootLazyRowKeys: string[] = []\n const getExpanded = (oldValue: TreeData, key: string) => {\n if (ifChangeExpandRowKeys) {\n if (expandRowKeys.value) {\n return ifExpandAll || expandRowKeys.value.includes(key)\n } else {\n return !!(ifExpandAll || oldValue?.expanded)\n }\n } else {\n const included =\n ifExpandAll ||\n (expandRowKeys.value && expandRowKeys.value.includes(key))\n return !!(oldValue?.expanded || included)\n }\n }\n // 合并 expanded 与 display,确保数据刷新后,状态不变\n keys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const newValue = { ...nested[key] }\n newValue.expanded = getExpanded(oldValue, key)\n if (newValue.lazy) {\n const { loaded = false, loading = false } = oldValue || {}\n newValue.loaded = !!loaded\n newValue.loading = !!loading\n rootLazyRowKeys.push(key)\n }\n newTreeData[key] = newValue\n })\n // 根据懒加载数据更新 treeData\n const lazyKeys = Object.keys(normalizedLazyNode_)\n if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) {\n lazyKeys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const lazyNodeChildren = normalizedLazyNode_[key].children\n if (rootLazyRowKeys.includes(key)) {\n // 懒加载的 root 节点,更新一下原有的数据,原来的 children 一定是空数组\n if (newTreeData[key].children?.length !== 0) {\n throw new Error('[ElTable]children must be an empty array.')\n }\n newTreeData[key].children = lazyNodeChildren\n } else {\n const { loaded = false, loading = false } = oldValue || {}\n newTreeData[key] = {\n lazy: true,\n loaded: !!loaded,\n loading: !!loading,\n expanded: getExpanded(oldValue, key),\n children: lazyNodeChildren,\n level: undefined,\n }\n }\n })\n }\n }\n treeData.value = newTreeData\n instance.store?.updateTableScrollY()\n }\n\n watch(\n () => expandRowKeys.value,\n () => {\n updateTreeData(true)\n }\n )\n\n watch(\n () => normalizedData.value,\n () => {\n updateTreeData()\n }\n )\n watch(\n () => normalizedLazyNode.value,\n () => {\n updateTreeData()\n }\n )\n\n const updateTreeExpandKeys = (value: string[]) => {\n expandRowKeys.value = value\n updateTreeData()\n }\n const isUseLazy = (data: TreeData) => {\n return lazy.value && data && 'loaded' in data && !data.loaded\n }\n const toggleTreeExpansion = (row: T, expanded?: boolean) => {\n instance.store.assertRowKey()\n\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = id && treeData.value[id]\n if (id && data && 'expanded' in data) {\n const oldExpanded = data.expanded\n expanded = isUndefined(expanded) ? !data.expanded : expanded\n treeData.value[id].expanded = expanded\n if (oldExpanded !== expanded) {\n instance.emit('expand-change', row, expanded)\n }\n expanded && isUseLazy(data) && loadData(row, id, data)\n instance.store.updateTableScrollY()\n }\n }\n\n const loadOrToggle = (row: T) => {\n instance.store.assertRowKey()\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = treeData.value[id]\n if (isUseLazy(data)) {\n loadData(row, id, data)\n } else {\n toggleTreeExpansion(row, undefined)\n }\n }\n\n const loadData = (row: T, key: string, treeNode: TreeNode) => {\n const { load } = instance.props as unknown as TableProps<T>\n if (load && !treeData.value[key].loaded) {\n treeData.value[key].loading = true\n load(row, treeNode, (data) => {\n if (!isArray(data)) {\n throw new TypeError('[ElTable] data must be an array')\n }\n treeData.value[key].loading = false\n treeData.value[key].loaded = true\n treeData.value[key].expanded = true\n if (data.length) {\n lazyTreeNodeMap.value[key] = data\n }\n instance.emit('expand-change', row, true)\n })\n }\n }\n\n const updateKeyChildren = (key: string, data: T[]) => {\n const { lazy, rowKey } = instance.props as unknown as TableProps<T>\n if (!lazy) return\n if (!rowKey) throw new Error('[Table] rowKey is required in updateKeyChild')\n\n if (lazyTreeNodeMap.value[key]) {\n lazyTreeNodeMap.value[key] = data\n }\n }\n\n return {\n loadData,\n loadOrToggle,\n toggleTreeExpansion,\n updateTreeExpandKeys,\n updateTreeData,\n updateKeyChildren,\n normalize,\n states: {\n expandRowKeys,\n treeData,\n indent,\n lazy,\n lazyTreeNodeMap,\n lazyColumnIdentifier,\n childrenColumnName,\n checkStrictly,\n },\n }\n}\n\nexport default useTree\n"],"mappings":";;;;;;;;AAaA,SAAS,QAA8B,aAAkC;CACvE,MAAM,6BAAmC,EAAE,CAAC;CAC5C,MAAM,wBAAyC,EAAE,CAAC;CAClD,MAAM,sBAAa,GAAG;CACtB,MAAM,oBAAW,MAAM;CACvB,MAAM,+BAA2C,EAAE,CAAC;CACpD,MAAM,oCAA2B,cAAc;CAC/C,MAAM,kCAAyB,WAAW;CAC1C,MAAM,6BAAoB,MAAM;CAChC,MAAM,wCAA+B;CACrC,MAAM,yCAAgC;AACpC,MAAI,CAAC,YAAY,OAAO,MAAO,QAAO,EAAE;AAExC,SAAO,UADM,YAAY,KAAK,SAAS,EAAE,CACnB;GACtB;CACF,MAAM,6CAAoC;EACxC,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,OAAO,OAAO,KAAK,gBAAgB,MAAM;EAC/C,MAAM,MAA8C,EAAE;AACtD,MAAI,CAAC,KAAK,OAAQ,QAAO;AACzB,OAAK,SAAS,QAAQ;AACpB,OAAI,gBAAgB,MAAM,KAAK,QAAQ;IACrC,MAAM,OAA6B,EAAE,UAAU,EAAE,EAAE;AACnD,oBAAgB,MAAM,KAAK,SAAS,QAAQ;KAC1C,MAAM,gBAAgBA,4BAAe,KAAK,OAAO;AACjD,UAAK,SAAS,KAAK,cAAc;AACjC,SAAI,IAAI,qBAAqB,UAAU,CAAC,IAAI,eAC1C,KAAI,iBAAiB,EAAE,UAAU,EAAE,EAAE;MAEvC;AACF,QAAI,OAAO;;IAEb;AACF,SAAO;GACP;CAEF,MAAM,aAAa,SAAc;EAC/B,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,MAAM,EAAE;AACd,4BACE,OACC,QAAQ,UAAU,UAAU;GAC3B,MAAM,WAAWA,4BAAe,QAAQ,OAAO;AAC/C,gCAAY,SAAS,CACnB,KAAI,YAAY;IACd,UAAU,SAAS,KAAK,QAAQA,4BAAe,KAAK,OAAO,CAAC;IAC5D;IACD;YACQ,KAAK,MAEd,KAAI,YAAY;IACd,UAAU,EAAE;IACZ,MAAM;IACN;IACD;KAGL,mBAAmB,OACnB,qBAAqB,OACrB,KAAK,MACN;AACD,SAAO;;CAGT,MAAM,kBACJ,wBAAwB,OACxB,gBACG;AACH,kBAAgB,SAAS,OAAO,OAAO,iBAAiB;EACxD,MAAM,SAAS,eAAe;EAC9B,MAAM,sBAAsB,mBAAmB;EAC/C,MAAM,OAAO,OAAO,KAAK,OAAO;EAChC,MAAM,cAAwC,EAAE;AAChD,MAAI,KAAK,QAAQ;GACf,MAAM,6BAAoB,SAAS;GACnC,MAAM,kBAA4B,EAAE;GACpC,MAAM,eAAe,UAAoB,QAAgB;AACvD,QAAI,sBACF,KAAI,cAAc,MAChB,QAAO,eAAe,cAAc,MAAM,SAAS,IAAI;QAEvD,QAAO,CAAC,EAAE,eAAe,UAAU;SAEhC;KACL,MAAM,WACJ,eACC,cAAc,SAAS,cAAc,MAAM,SAAS,IAAI;AAC3D,YAAO,CAAC,EAAE,UAAU,YAAY;;;AAIpC,QAAK,SAAS,QAAQ;IACpB,MAAM,WAAW,YAAY;IAC7B,MAAM,WAAW,EAAE,GAAG,OAAO,MAAM;AACnC,aAAS,WAAW,YAAY,UAAU,IAAI;AAC9C,QAAI,SAAS,MAAM;KACjB,MAAM,EAAE,SAAS,OAAO,UAAU,UAAU,YAAY,EAAE;AAC1D,cAAS,SAAS,CAAC,CAAC;AACpB,cAAS,UAAU,CAAC,CAAC;AACrB,qBAAgB,KAAK,IAAI;;AAE3B,gBAAY,OAAO;KACnB;GAEF,MAAM,WAAW,OAAO,KAAK,oBAAoB;AACjD,OAAI,KAAK,SAAS,SAAS,UAAU,gBAAgB,OACnD,UAAS,SAAS,QAAQ;IACxB,MAAM,WAAW,YAAY;IAC7B,MAAM,mBAAmB,oBAAoB,KAAK;AAClD,QAAI,gBAAgB,SAAS,IAAI,EAAE;AAEjC,SAAI,YAAY,KAAK,UAAU,WAAW,EACxC,OAAM,IAAI,MAAM,4CAA4C;AAE9D,iBAAY,KAAK,WAAW;WACvB;KACL,MAAM,EAAE,SAAS,OAAO,UAAU,UAAU,YAAY,EAAE;AAC1D,iBAAY,OAAO;MACjB,MAAM;MACN,QAAQ,CAAC,CAAC;MACV,SAAS,CAAC,CAAC;MACX,UAAU,YAAY,UAAU,IAAI;MACpC,UAAU;MACV,OAAO;MACR;;KAEH;;AAGN,WAAS,QAAQ;AACjB,WAAS,OAAO,oBAAoB;;AAGtC,sBACQ,cAAc,aACd;AACJ,iBAAe,KAAK;GAEvB;AAED,sBACQ,eAAe,aACf;AACJ,kBAAgB;GAEnB;AACD,sBACQ,mBAAmB,aACnB;AACJ,kBAAgB;GAEnB;CAED,MAAM,wBAAwB,UAAoB;AAChD,gBAAc,QAAQ;AACtB,kBAAgB;;CAElB,MAAM,aAAa,SAAmB;AACpC,SAAO,KAAK,SAAS,QAAQ,YAAY,QAAQ,CAAC,KAAK;;CAEzD,MAAM,uBAAuB,KAAQ,aAAuB;AAC1D,WAAS,MAAM,cAAc;EAE7B,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,KAAKA,4BAAe,KAAK,OAAO;EACtC,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,MAAI,MAAM,QAAQ,cAAc,MAAM;GACpC,MAAM,cAAc,KAAK;AACzB,cAAWC,0BAAY,SAAS,GAAG,CAAC,KAAK,WAAW;AACpD,YAAS,MAAM,IAAI,WAAW;AAC9B,OAAI,gBAAgB,SAClB,UAAS,KAAK,iBAAiB,KAAK,SAAS;AAE/C,eAAY,UAAU,KAAK,IAAI,SAAS,KAAK,IAAI,KAAK;AACtD,YAAS,MAAM,oBAAoB;;;CAIvC,MAAM,gBAAgB,QAAW;AAC/B,WAAS,MAAM,cAAc;EAC7B,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,KAAKD,4BAAe,KAAK,OAAO;EACtC,MAAM,OAAO,SAAS,MAAM;AAC5B,MAAI,UAAU,KAAK,CACjB,UAAS,KAAK,IAAI,KAAK;MAEvB,qBAAoB,KAAK,OAAU;;CAIvC,MAAM,YAAY,KAAQ,KAAa,aAAuB;EAC5D,MAAM,EAAE,SAAS,SAAS;AAC1B,MAAI,QAAQ,CAAC,SAAS,MAAM,KAAK,QAAQ;AACvC,YAAS,MAAM,KAAK,UAAU;AAC9B,QAAK,KAAK,WAAW,SAAS;AAC5B,QAAI,0BAAS,KAAK,CAChB,OAAM,IAAI,UAAU,kCAAkC;AAExD,aAAS,MAAM,KAAK,UAAU;AAC9B,aAAS,MAAM,KAAK,SAAS;AAC7B,aAAS,MAAM,KAAK,WAAW;AAC/B,QAAI,KAAK,OACP,iBAAgB,MAAM,OAAO;AAE/B,aAAS,KAAK,iBAAiB,KAAK,KAAK;KACzC;;;CAIN,MAAM,qBAAqB,KAAa,SAAc;EACpD,MAAM,EAAE,MAAM,WAAW,SAAS;AAClC,MAAI,CAAC,KAAM;AACX,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,+CAA+C;AAE5E,MAAI,gBAAgB,MAAM,KACxB,iBAAgB,MAAM,OAAO;;AAIjC,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ;GACN;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF"}
|
|
1
|
+
{"version":3,"file":"tree.js","names":["getRowIdentity","isUndefined"],"sources":["../../../../../../../packages/components/table/src/store/tree.ts"],"sourcesContent":["import { computed, getCurrentInstance, ref, unref, watch } from 'vue'\nimport { isArray, isUndefined } from '@element-plus/utils'\nimport { getRowIdentity, walkTreeNode } from '../util'\n\nimport type { WatcherPropsData } from '.'\nimport type { DefaultRow, Table, TableProps, TreeNode } from '../table/defaults'\n\nexport interface TreeData extends TreeNode {\n children?: string[]\n lazy?: boolean\n loaded?: boolean\n}\n\nfunction useTree<T extends DefaultRow>(watcherData: WatcherPropsData<T>) {\n const expandRowKeys = ref<Array<string>>([])\n const treeData = ref<Record<string, TreeData>>({})\n const indent = ref(16)\n const lazy = ref(false)\n const lazyTreeNodeMap = ref<Record<string, T[]>>({})\n const lazyColumnIdentifier = ref('hasChildren')\n const childrenColumnName = ref('children')\n const checkStrictly = ref(false)\n const instance = getCurrentInstance() as Table<T>\n const normalizedData = computed(() => {\n if (!watcherData.rowKey.value) return {}\n const data = watcherData.data.value || []\n return normalize(data)\n })\n const normalizedLazyNode = computed(() => {\n const rowKey = watcherData.rowKey.value\n const keys = Object.keys(lazyTreeNodeMap.value)\n const res: Record<string, { children: string[] }> = {}\n if (!keys.length) return res\n keys.forEach((key) => {\n if (lazyTreeNodeMap.value[key].length) {\n const item: (typeof res)[number] = { children: [] }\n lazyTreeNodeMap.value[key].forEach((row) => {\n const currentRowKey = getRowIdentity(row, rowKey)\n item.children.push(currentRowKey)\n if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) {\n res[currentRowKey] = { children: [] }\n }\n })\n res[key] = item\n }\n })\n return res\n })\n\n const normalize = (data: T[]) => {\n const rowKey = watcherData.rowKey.value\n const res = {} as Record<string, TreeData>\n walkTreeNode(\n data,\n (parent, children, level) => {\n const parentId = getRowIdentity(parent, rowKey)\n if (isArray(children)) {\n res[parentId] = {\n children: children.map((row) => getRowIdentity(row, rowKey)),\n level,\n }\n } else if (lazy.value) {\n // 当 children 不存在且 lazy 为 true,该节点即为懒加载的节点\n res[parentId] = {\n children: [],\n lazy: true,\n level,\n }\n }\n },\n childrenColumnName.value,\n lazyColumnIdentifier.value,\n lazy.value\n )\n return res\n }\n\n const updateTreeData = (\n ifChangeExpandRowKeys = false,\n ifExpandAll?: boolean\n ) => {\n ifExpandAll ||= instance.store?.states.defaultExpandAll.value\n const nested = normalizedData.value\n const normalizedLazyNode_ = normalizedLazyNode.value\n const keys = Object.keys(nested)\n const newTreeData: Record<string, TreeData> = {}\n if (keys.length) {\n const oldTreeData = unref(treeData)\n const rootLazyRowKeys: string[] = []\n const getExpanded = (oldValue: TreeData, key: string) => {\n if (ifChangeExpandRowKeys) {\n if (expandRowKeys.value) {\n return ifExpandAll || expandRowKeys.value.includes(key)\n } else {\n return !!(ifExpandAll || oldValue?.expanded)\n }\n } else {\n const included =\n ifExpandAll ||\n (expandRowKeys.value && expandRowKeys.value.includes(key))\n return !!(oldValue?.expanded || included)\n }\n }\n // 合并 expanded 与 display,确保数据刷新后,状态不变\n keys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const newValue = { ...nested[key] }\n newValue.expanded = getExpanded(oldValue, key)\n if (newValue.lazy) {\n const { loaded = false, loading = false } = oldValue || {}\n newValue.loaded = !!loaded\n newValue.loading = !!loading\n rootLazyRowKeys.push(key)\n }\n newTreeData[key] = newValue\n })\n // 根据懒加载数据更新 treeData\n const lazyKeys = Object.keys(normalizedLazyNode_)\n if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) {\n lazyKeys.forEach((key) => {\n const oldValue = oldTreeData[key]\n const lazyNodeChildren = normalizedLazyNode_[key].children\n if (rootLazyRowKeys.includes(key)) {\n // 懒加载的 root 节点,更新一下原有的数据,原来的 children 一定是空数组\n if (newTreeData[key].children?.length !== 0) {\n throw new Error('[ElTable]children must be an empty array.')\n }\n newTreeData[key].children = lazyNodeChildren\n } else {\n const { loaded = false, loading = false } = oldValue || {}\n newTreeData[key] = {\n lazy: true,\n loaded: !!loaded,\n loading: !!loading,\n expanded: getExpanded(oldValue, key),\n children: lazyNodeChildren,\n level: undefined,\n }\n }\n })\n }\n }\n treeData.value = newTreeData\n instance.store?.updateTableScrollY()\n }\n\n watch(\n () => expandRowKeys.value,\n () => {\n updateTreeData(true)\n },\n { deep: true }\n )\n\n watch(\n () => normalizedData.value,\n () => {\n updateTreeData()\n }\n )\n watch(\n () => normalizedLazyNode.value,\n () => {\n updateTreeData()\n }\n )\n\n const updateTreeExpandKeys = (value: string[]) => {\n expandRowKeys.value = value\n updateTreeData()\n }\n const isUseLazy = (data: TreeData) => {\n return lazy.value && data && 'loaded' in data && !data.loaded\n }\n const toggleTreeExpansion = (row: T, expanded?: boolean) => {\n instance.store.assertRowKey()\n\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = id && treeData.value[id]\n if (id && data && 'expanded' in data) {\n const oldExpanded = data.expanded\n expanded = isUndefined(expanded) ? !data.expanded : expanded\n treeData.value[id].expanded = expanded\n if (oldExpanded !== expanded) {\n instance.emit('expand-change', row, expanded)\n }\n expanded && isUseLazy(data) && loadData(row, id, data)\n instance.store.updateTableScrollY()\n }\n }\n\n const loadOrToggle = (row: T) => {\n instance.store.assertRowKey()\n const rowKey = watcherData.rowKey.value\n const id = getRowIdentity(row, rowKey)\n const data = treeData.value[id]\n if (isUseLazy(data)) {\n loadData(row, id, data)\n } else {\n toggleTreeExpansion(row, undefined)\n }\n }\n\n const loadData = (row: T, key: string, treeNode: TreeNode) => {\n const { load } = instance.props as unknown as TableProps<T>\n if (load && !treeData.value[key].loaded) {\n treeData.value[key].loading = true\n load(row, treeNode, (data) => {\n if (!isArray(data)) {\n throw new TypeError('[ElTable] data must be an array')\n }\n treeData.value[key].loading = false\n treeData.value[key].loaded = true\n treeData.value[key].expanded = true\n if (data.length) {\n lazyTreeNodeMap.value[key] = data\n }\n instance.emit('expand-change', row, true)\n })\n }\n }\n\n const updateKeyChildren = (key: string, data: T[]) => {\n const { lazy, rowKey } = instance.props as unknown as TableProps<T>\n if (!lazy) return\n if (!rowKey) throw new Error('[Table] rowKey is required in updateKeyChild')\n\n if (lazyTreeNodeMap.value[key]) {\n lazyTreeNodeMap.value[key] = data\n }\n }\n\n return {\n loadData,\n loadOrToggle,\n toggleTreeExpansion,\n updateTreeExpandKeys,\n updateTreeData,\n updateKeyChildren,\n normalize,\n states: {\n expandRowKeys,\n treeData,\n indent,\n lazy,\n lazyTreeNodeMap,\n lazyColumnIdentifier,\n childrenColumnName,\n checkStrictly,\n },\n }\n}\n\nexport default useTree\n"],"mappings":"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"}
|
|
@@ -122,7 +122,7 @@ declare const _default: vue.DefineComponent<{
|
|
|
122
122
|
minWidth: string | number;
|
|
123
123
|
width: string | number;
|
|
124
124
|
resizable: boolean;
|
|
125
|
-
showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "
|
|
125
|
+
showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined;
|
|
126
126
|
sortOrders: (TableSortOrder | null)[];
|
|
127
127
|
sortable: string | boolean;
|
|
128
128
|
reserveSelection: boolean;
|
|
@@ -734,7 +734,7 @@ declare const __VLS_export: vue.DefineComponent<{
|
|
|
734
734
|
computedSumText: vue.ComputedRef<string>;
|
|
735
735
|
computedEmptyText: vue.ComputedRef<string>;
|
|
736
736
|
computedTooltipEffect: vue.ComputedRef<string | undefined>;
|
|
737
|
-
computedTooltipOptions: vue.ComputedRef<Partial<Pick<UseTooltipProps, "
|
|
737
|
+
computedTooltipOptions: vue.ComputedRef<Partial<Pick<UseTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined>;
|
|
738
738
|
tableLayout: vue.ComputedRef<"fixed" | "auto">;
|
|
739
739
|
scrollbarViewStyle: {
|
|
740
740
|
display: string;
|
|
@@ -895,7 +895,7 @@ declare const __VLS_export: vue.DefineComponent<{
|
|
|
895
895
|
allowDragLastColumn: boolean;
|
|
896
896
|
stripe: boolean;
|
|
897
897
|
treeProps: TreeProps | undefined;
|
|
898
|
-
showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "
|
|
898
|
+
showOverflowTooltip: boolean | Partial<Pick<UseTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "enterable" | "popperOptions" | "showArrow" | "transition" | "showAfter" | "hideAfter">> | undefined;
|
|
899
899
|
showHeader: boolean;
|
|
900
900
|
showSummary: boolean;
|
|
901
901
|
highlightCurrentRow: boolean;
|
|
@@ -66,11 +66,16 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
66
66
|
const navOffset = (0, vue.ref)(0);
|
|
67
67
|
const isFocus = (0, vue.ref)(false);
|
|
68
68
|
const focusable = (0, vue.ref)(true);
|
|
69
|
+
const isWheelScrolling = (0, vue.ref)(false);
|
|
69
70
|
const tracker = (0, vue.shallowRef)();
|
|
70
71
|
const isHorizontal = (0, vue.computed)(() => ["top", "bottom"].includes(rootTabs.props.tabPosition));
|
|
71
72
|
const sizeName = (0, vue.computed)(() => isHorizontal.value ? "width" : "height");
|
|
72
73
|
const navStyle = (0, vue.computed)(() => {
|
|
73
|
-
|
|
74
|
+
const dir = sizeName.value === "width" ? "X" : "Y";
|
|
75
|
+
return {
|
|
76
|
+
transition: isWheelScrolling.value ? "none" : void 0,
|
|
77
|
+
transform: `translate${dir}(-${navOffset.value}px)`
|
|
78
|
+
};
|
|
74
79
|
});
|
|
75
80
|
const { width: navContainerWidth, height: navContainerHeight } = (0, _vueuse_core.useElementSize)(navScroll$);
|
|
76
81
|
const { width: navWidth, height: navHeight } = (0, _vueuse_core.useElementSize)(nav$, {
|
|
@@ -86,6 +91,13 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
86
91
|
}, (offset) => {
|
|
87
92
|
navOffset.value = (0, lodash_unified.clamp)(navOffset.value + offset, 0, navSize.value - navContainerSize.value);
|
|
88
93
|
});
|
|
94
|
+
const handleWheel = (event) => {
|
|
95
|
+
isWheelScrolling.value = true;
|
|
96
|
+
onWheel(event);
|
|
97
|
+
require_raf.rAF(() => {
|
|
98
|
+
isWheelScrolling.value = false;
|
|
99
|
+
});
|
|
100
|
+
};
|
|
89
101
|
const scrollPrev = () => {
|
|
90
102
|
if (!navScroll$.value) return;
|
|
91
103
|
const containerSize = navScroll$.value[`offset${require_strings.capitalize(sizeName.value)}`];
|
|
@@ -126,8 +138,8 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
126
138
|
const update = () => {
|
|
127
139
|
if (!nav$.value || !navScroll$.value) return;
|
|
128
140
|
props.stretch && tabBarRef.value?.update();
|
|
129
|
-
const navSize = nav$.value
|
|
130
|
-
const containerSize = navScroll$.value
|
|
141
|
+
const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
|
|
142
|
+
const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
|
|
131
143
|
const currentOffset = navOffset.value;
|
|
132
144
|
if (containerSize < navSize) {
|
|
133
145
|
scrollable.value = scrollable.value || {};
|
|
@@ -262,7 +274,7 @@ const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
262
274
|
"style": navStyle.value,
|
|
263
275
|
"role": "tablist",
|
|
264
276
|
"onKeydown": changeTab,
|
|
265
|
-
"onWheel":
|
|
277
|
+
"onWheel": handleWheel
|
|
266
278
|
}, [...[!props.type ? (0, vue.createVNode)(require_tab_bar.default, {
|
|
267
279
|
"ref": tabBarRef,
|
|
268
280
|
"tabs": [...props.panes],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab-nav.js","names":["computed","defineComponent","inject","nextTick","onMounted","onUpdated","ref","shallowRef","triggerRef","watch","createVNode","_createVNode","useDocumentVisibility","useElementSize","useResizeObserver","useWindowFocus","buildProps","capitalize","definePropType","getEventCode","mutable","rAF","throwError","EVENT_CODE","ElIcon","ArrowLeft","ArrowRight","Close","useNamespace","useWheel","clamp","TabBar","tabsRootContextKey","tabNavProps","panes","type","Array","default","currentName","String","Number","editable","Boolean","values","stretch","tabindex","undefined","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","name","props","emits","setup","expose","emit","rootTabs","ns","visibility","focused","navScroll$","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","tracker","isHorizontal","includes","tabPosition","sizeName","value","navStyle","dir","transform","width","navContainerWidth","height","navContainerHeight","navWidth","navHeight","box","navContainerSize","navSize","onWheel","atStartEdge","atEndEdge","layout","offset","scrollPrev","containerSize","currentOffset","newOffset","scrollNext","scrollToActiveTab","nav","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","offsetHeight","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","event","code","step","up","down","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","setRefs","el","key","focusActiveTab","setTimeout","tabListRef","scheduleRender","scrollBtn","e","is","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","tabLabelContent","slots","label","active","onFocus","onBlur","delete","backspace"],"sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n triggerRef,\n watch,\n} from 'vue'\nimport {\n useDocumentVisibility,\n useElementSize,\n useResizeObserver,\n useWindowFocus,\n} from '@vueuse/core'\nimport {\n buildProps,\n capitalize,\n definePropType,\n getEventCode,\n mutable,\n rAF,\n throwError,\n} from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport useWheel from '@element-plus/components/virtual-list/src/hooks/use-wheel'\nimport { clamp } from 'lodash-unified'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type {\n CSSProperties,\n ComponentPublicInstance,\n ExtractPropTypes,\n ExtractPublicPropTypes,\n} from 'vue'\nimport type { TabBarInstance } from './tab-bar'\nimport type { TabPaneName, TabsPaneContext } from './constants'\n\ninterface Scrollable {\n next?: boolean\n prev?: number\n}\n\nexport const tabNavProps = buildProps({\n panes: {\n type: definePropType<TabsPaneContext[]>(Array),\n default: () => mutable([] as const),\n },\n currentName: {\n type: [String, Number],\n default: '',\n },\n editable: Boolean,\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\n /**\n * @description tab-nav tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n} as const)\n\nexport const tabNavEmits = {\n tabClick: (tab: TabsPaneContext, tabName: TabPaneName, ev: Event) =>\n ev instanceof Event,\n tabRemove: (tab: TabsPaneContext, ev: Event) => ev instanceof Event,\n}\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavPropsPublic = ExtractPublicPropTypes<typeof tabNavProps>\nexport type TabNavEmits = typeof tabNavEmits\n\nconst COMPONENT_NAME = 'ElTabNav'\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, { expose, emit }) {\n const rootTabs = inject(tabsRootContextKey)\n if (!rootTabs) throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`)\n\n const ns = useNamespace('tabs')\n const visibility = useDocumentVisibility()\n const focused = useWindowFocus()\n\n const navScroll$ = ref<HTMLDivElement>()\n const nav$ = ref<HTMLDivElement>()\n const el$ = ref<HTMLDivElement>()\n const tabRefsMap = ref<{ [key: TabPaneName]: HTMLDivElement }>({})\n\n const tabBarRef = ref<TabBarInstance>()\n\n const scrollable = ref<false | Scrollable>(false)\n const navOffset = ref(0)\n const isFocus = ref(false)\n const focusable = ref(true)\n const tracker = shallowRef()\n\n const isHorizontal = computed(() =>\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n )\n\n const sizeName = computed(() => (isHorizontal.value ? 'width' : 'height'))\n const navStyle = computed<CSSProperties>(() => {\n const dir = sizeName.value === 'width' ? 'X' : 'Y'\n return {\n transform: `translate${dir}(-${navOffset.value}px)`,\n }\n })\n\n const { width: navContainerWidth, height: navContainerHeight } =\n useElementSize(navScroll$)\n const { width: navWidth, height: navHeight } = useElementSize(\n nav$,\n { width: 0, height: 0 },\n { box: 'border-box' }\n )\n\n const navContainerSize = computed(() =>\n isHorizontal.value ? navContainerWidth.value : navContainerHeight.value\n )\n const navSize = computed(() =>\n isHorizontal.value ? navWidth.value : navHeight.value\n )\n\n const { onWheel } = useWheel(\n {\n atStartEdge: computed(() => navOffset.value <= 0),\n atEndEdge: computed(\n () => navSize.value - navOffset.value <= navContainerSize.value\n ),\n layout: computed(() =>\n isHorizontal.value ? 'horizontal' : 'vertical'\n ),\n },\n (offset) => {\n navOffset.value = clamp(\n navOffset.value + offset,\n 0,\n navSize.value - navContainerSize.value\n )\n }\n )\n\n const scrollPrev = () => {\n if (!navScroll$.value) return\n\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (!currentOffset) return\n\n const newOffset =\n currentOffset > containerSize ? currentOffset - containerSize : 0\n\n navOffset.value = newOffset\n }\n\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (navSize - currentOffset <= containerSize) return\n\n const newOffset =\n navSize - currentOffset > containerSize * 2\n ? currentOffset + containerSize\n : navSize - containerSize\n\n navOffset.value = newOffset\n }\n\n const scrollToActiveTab = async () => {\n const nav = nav$.value\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n if (!activeTab) return\n\n const navScroll = navScroll$.value\n\n const activeTabBounding = activeTab.getBoundingClientRect()\n const navScrollBounding = navScroll.getBoundingClientRect()\n const maxOffset = isHorizontal.value\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height\n const currentOffset = navOffset.value\n let newOffset = currentOffset\n\n if (isHorizontal.value) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset =\n currentOffset - (navScrollBounding.left - activeTabBounding.left)\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset =\n currentOffset + activeTabBounding.right - navScrollBounding.right\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset =\n currentOffset - (navScrollBounding.top - activeTabBounding.top)\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset =\n currentOffset +\n (activeTabBounding.bottom - navScrollBounding.bottom)\n }\n }\n newOffset = Math.max(newOffset, 0)\n navOffset.value = Math.min(newOffset, maxOffset)\n }\n\n const update = () => {\n if (!nav$.value || !navScroll$.value) return\n\n props.stretch && tabBarRef.value?.update()\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (containerSize < navSize) {\n scrollable.value = scrollable.value || {}\n scrollable.value.prev = currentOffset\n scrollable.value.next = currentOffset + containerSize < navSize\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize\n }\n } else {\n scrollable.value = false\n if (currentOffset > 0) {\n navOffset.value = 0\n }\n }\n }\n\n const changeTab = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let step = 0\n\n switch (code) {\n case EVENT_CODE.left:\n case EVENT_CODE.up:\n step = -1\n break\n case EVENT_CODE.right:\n case EVENT_CODE.down:\n step = 1\n break\n default:\n return\n }\n\n const tabList = Array.from(\n (\n event.currentTarget as HTMLDivElement\n ).querySelectorAll<HTMLDivElement>('[role=tab]:not(.is-disabled)')\n )\n const currentIndex = tabList.indexOf(event.target as HTMLDivElement)\n let nextIndex = currentIndex + step\n\n if (nextIndex < 0) {\n nextIndex = tabList.length - 1\n } else if (nextIndex >= tabList.length) {\n nextIndex = 0\n }\n\n tabList[nextIndex].focus({ preventScroll: true }) // 改变焦点元素\n tabList[nextIndex].click() // 选中下一个tab\n setFocus()\n }\n\n const setFocus = () => {\n if (focusable.value) isFocus.value = true\n }\n const removeFocus = () => (isFocus.value = false)\n\n const setRefs = (\n el: Element | ComponentPublicInstance | null,\n key: TabPaneName\n ) => {\n tabRefsMap.value[key] = el as HTMLDivElement\n }\n\n const focusActiveTab = async () => {\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n activeTab?.focus({ preventScroll: true })\n }\n\n watch(visibility, (visibility) => {\n if (visibility === 'hidden') {\n focusable.value = false\n } else if (visibility === 'visible') {\n setTimeout(() => (focusable.value = true), 50)\n }\n })\n watch(focused, (focused) => {\n if (focused) {\n setTimeout(() => (focusable.value = true), 50)\n } else {\n focusable.value = false\n }\n })\n\n useResizeObserver(el$, () => {\n rAF(update)\n })\n\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0))\n onUpdated(() => update())\n\n expose({\n scrollToActiveTab,\n removeFocus,\n focusActiveTab,\n tabListRef: nav$,\n tabBarRef,\n scheduleRender: () => triggerRef(tracker),\n })\n\n return () => {\n const scrollBtn = scrollable.value\n ? [\n <span\n class={[\n ns.e('nav-prev'),\n ns.is('disabled', !scrollable.value.prev),\n ]}\n onClick={scrollPrev}\n >\n <ElIcon>\n <ArrowLeft />\n </ElIcon>\n </span>,\n <span\n class={[\n ns.e('nav-next'),\n ns.is('disabled', !scrollable.value.next),\n ]}\n onClick={scrollNext}\n >\n <ElIcon>\n <ArrowRight />\n </ElIcon>\n </span>,\n ]\n : null\n\n const tabs = props.panes.map((pane, index) => {\n const uid = pane.uid\n const disabled = pane.props.disabled\n const tabName = pane.props.name ?? pane.index ?? `${index}`\n const closable =\n !disabled &&\n (pane.isClosable || (pane.props.closable !== false && props.editable))\n pane.index = `${index}`\n\n const btnClose = closable ? (\n <ElIcon\n class=\"is-icon-close\"\n // `onClick` not exist when generate dts\n\n // @ts-ignore\n onClick={(ev: MouseEvent) => emit('tabRemove', pane, ev)}\n >\n <Close />\n </ElIcon>\n ) : null\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label\n const tabindex =\n !disabled && pane.active\n ? (props.tabindex ?? rootTabs.props.tabindex)\n : -1\n\n return (\n <div\n ref={(el) => setRefs(el, tabName)}\n class={[\n ns.e('item'),\n ns.is(rootTabs.props.tabPosition),\n ns.is('active', pane.active),\n ns.is('disabled', disabled),\n ns.is('closable', closable),\n ns.is('focus', isFocus.value),\n ]}\n id={`tab-${tabName}`}\n key={`tab-${uid}`}\n aria-controls={`pane-${tabName}`}\n role=\"tab\"\n aria-selected={pane.active}\n tabindex={tabindex}\n onFocus={() => setFocus()}\n onBlur={() => removeFocus()}\n onClick={(ev: MouseEvent) => {\n removeFocus()\n emit('tabClick', pane, tabName, ev)\n }}\n onKeydown={(ev: KeyboardEvent) => {\n const code = getEventCode(ev)\n if (\n closable &&\n (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', pane, ev)\n }\n }}\n >\n {...[tabLabelContent, btnClose]}\n </div>\n )\n })\n\n // By tracking the value property, we can schedule a job to re-render `TabNav` when needed.\n // Unlike `instance.update`, the scheduler ensures the job is queued only once even if we trigger it multiple times.\n tracker.value\n\n return (\n <div\n ref={el$}\n class={[\n ns.e('nav-wrap'),\n ns.is('scrollable', !!scrollable.value),\n ns.is(rootTabs.props.tabPosition),\n ]}\n >\n {scrollBtn}\n <div class={ns.e('nav-scroll')} ref={navScroll$}>\n {props.panes.length > 0 ? (\n <div\n class={[\n ns.e('nav'),\n ns.is(rootTabs.props.tabPosition),\n ns.is(\n 'stretch',\n props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ),\n ]}\n ref={nav$}\n style={navStyle.value}\n role=\"tablist\"\n onKeydown={changeTab}\n onWheel={onWheel}\n >\n {...[\n !props.type ? (\n <TabBar\n ref={tabBarRef}\n tabs={[...props.panes]}\n tabRefs={tabRefsMap.value}\n />\n ) : null,\n tabs,\n ]}\n </div>\n ) : null}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n scrollToActiveTab: () => Promise<void>\n removeFocus: () => void\n focusActiveTab: () => void\n scheduleRender: () => void\n tabListRef: HTMLDivElement | undefined\n tabBarRef: TabBarInstance | undefined\n}\n\nexport default TabNav\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tab-nav.js","names":["computed","defineComponent","inject","nextTick","onMounted","onUpdated","ref","shallowRef","triggerRef","watch","createVNode","_createVNode","useDocumentVisibility","useElementSize","useResizeObserver","useWindowFocus","buildProps","capitalize","definePropType","getEventCode","mutable","rAF","throwError","EVENT_CODE","ElIcon","ArrowLeft","ArrowRight","Close","useNamespace","useWheel","clamp","TabBar","tabsRootContextKey","tabNavProps","panes","type","Array","default","currentName","String","Number","editable","Boolean","values","stretch","tabindex","undefined","tabNavEmits","tabClick","tab","tabName","ev","Event","tabRemove","COMPONENT_NAME","TabNav","name","props","emits","setup","expose","emit","rootTabs","ns","visibility","focused","navScroll$","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","focusable","isWheelScrolling","tracker","isHorizontal","includes","tabPosition","sizeName","value","navStyle","dir","transition","transform","width","navContainerWidth","height","navContainerHeight","navWidth","navHeight","box","navContainerSize","navSize","onWheel","atStartEdge","atEndEdge","layout","offset","handleWheel","event","scrollPrev","containerSize","currentOffset","newOffset","scrollNext","scrollToActiveTab","nav","activeTab","navScroll","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","offsetHeight","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","code","step","up","down","tabList","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","preventScroll","click","setFocus","removeFocus","setRefs","el","key","focusActiveTab","setTimeout","tabListRef","scheduleRender","scrollBtn","e","is","tabs","map","pane","index","uid","disabled","closable","isClosable","btnClose","tabLabelContent","slots","label","active","onFocus","onBlur","delete","backspace"],"sources":["../../../../../../packages/components/tabs/src/tab-nav.tsx"],"sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n shallowRef,\n triggerRef,\n watch,\n} from 'vue'\nimport {\n useDocumentVisibility,\n useElementSize,\n useResizeObserver,\n useWindowFocus,\n} from '@vueuse/core'\nimport {\n buildProps,\n capitalize,\n definePropType,\n getEventCode,\n mutable,\n rAF,\n throwError,\n} from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport useWheel from '@element-plus/components/virtual-list/src/hooks/use-wheel'\nimport { clamp } from 'lodash-unified'\nimport TabBar from './tab-bar.vue'\nimport { tabsRootContextKey } from './constants'\n\nimport type {\n CSSProperties,\n ComponentPublicInstance,\n ExtractPropTypes,\n ExtractPublicPropTypes,\n} from 'vue'\nimport type { TabBarInstance } from './tab-bar'\nimport type { TabPaneName, TabsPaneContext } from './constants'\n\ninterface Scrollable {\n next?: boolean\n prev?: number\n}\n\nexport const tabNavProps = buildProps({\n panes: {\n type: definePropType<TabsPaneContext[]>(Array),\n default: () => mutable([] as const),\n },\n currentName: {\n type: [String, Number],\n default: '',\n },\n editable: Boolean,\n type: {\n type: String,\n values: ['card', 'border-card', ''],\n default: '',\n },\n stretch: Boolean,\n /**\n * @description tab-nav tabindex\n */\n tabindex: {\n type: [String, Number],\n default: undefined,\n },\n} as const)\n\nexport const tabNavEmits = {\n tabClick: (tab: TabsPaneContext, tabName: TabPaneName, ev: Event) =>\n ev instanceof Event,\n tabRemove: (tab: TabsPaneContext, ev: Event) => ev instanceof Event,\n}\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavPropsPublic = ExtractPublicPropTypes<typeof tabNavProps>\nexport type TabNavEmits = typeof tabNavEmits\n\nconst COMPONENT_NAME = 'ElTabNav'\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, { expose, emit }) {\n const rootTabs = inject(tabsRootContextKey)\n if (!rootTabs) throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`)\n\n const ns = useNamespace('tabs')\n const visibility = useDocumentVisibility()\n const focused = useWindowFocus()\n\n const navScroll$ = ref<HTMLDivElement>()\n const nav$ = ref<HTMLDivElement>()\n const el$ = ref<HTMLDivElement>()\n const tabRefsMap = ref<{ [key: TabPaneName]: HTMLDivElement }>({})\n\n const tabBarRef = ref<TabBarInstance>()\n\n const scrollable = ref<false | Scrollable>(false)\n const navOffset = ref(0)\n const isFocus = ref(false)\n const focusable = ref(true)\n const isWheelScrolling = ref(false)\n const tracker = shallowRef()\n\n const isHorizontal = computed(() =>\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n )\n\n const sizeName = computed(() => (isHorizontal.value ? 'width' : 'height'))\n const navStyle = computed<CSSProperties>(() => {\n const dir = sizeName.value === 'width' ? 'X' : 'Y'\n return {\n transition: isWheelScrolling.value ? 'none' : undefined,\n transform: `translate${dir}(-${navOffset.value}px)`,\n }\n })\n\n const { width: navContainerWidth, height: navContainerHeight } =\n useElementSize(navScroll$)\n const { width: navWidth, height: navHeight } = useElementSize(\n nav$,\n { width: 0, height: 0 },\n { box: 'border-box' }\n )\n\n const navContainerSize = computed(() =>\n isHorizontal.value ? navContainerWidth.value : navContainerHeight.value\n )\n const navSize = computed(() =>\n isHorizontal.value ? navWidth.value : navHeight.value\n )\n\n const { onWheel } = useWheel(\n {\n atStartEdge: computed(() => navOffset.value <= 0),\n atEndEdge: computed(\n () => navSize.value - navOffset.value <= navContainerSize.value\n ),\n layout: computed(() =>\n isHorizontal.value ? 'horizontal' : 'vertical'\n ),\n },\n (offset) => {\n navOffset.value = clamp(\n navOffset.value + offset,\n 0,\n navSize.value - navContainerSize.value\n )\n }\n )\n\n const handleWheel = (event: WheelEvent) => {\n isWheelScrolling.value = true\n onWheel(event)\n rAF(() => {\n isWheelScrolling.value = false\n })\n }\n\n const scrollPrev = () => {\n if (!navScroll$.value) return\n\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (!currentOffset) return\n\n const newOffset =\n currentOffset > containerSize ? currentOffset - containerSize : 0\n\n navOffset.value = newOffset\n }\n\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`]\n const currentOffset = navOffset.value\n\n if (navSize - currentOffset <= containerSize) return\n\n const newOffset =\n navSize - currentOffset > containerSize * 2\n ? currentOffset + containerSize\n : navSize - containerSize\n\n navOffset.value = newOffset\n }\n\n const scrollToActiveTab = async () => {\n const nav = nav$.value\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return\n\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n if (!activeTab) return\n\n const navScroll = navScroll$.value\n\n const activeTabBounding = activeTab.getBoundingClientRect()\n const navScrollBounding = navScroll.getBoundingClientRect()\n const maxOffset = isHorizontal.value\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height\n const currentOffset = navOffset.value\n let newOffset = currentOffset\n\n if (isHorizontal.value) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset =\n currentOffset - (navScrollBounding.left - activeTabBounding.left)\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset =\n currentOffset + activeTabBounding.right - navScrollBounding.right\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset =\n currentOffset - (navScrollBounding.top - activeTabBounding.top)\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset =\n currentOffset +\n (activeTabBounding.bottom - navScrollBounding.bottom)\n }\n }\n newOffset = Math.max(newOffset, 0)\n navOffset.value = Math.min(newOffset, maxOffset)\n }\n\n const update = () => {\n if (!nav$.value || !navScroll$.value) return\n\n props.stretch && tabBarRef.value?.update()\n\n const navSize = nav$.value.getBoundingClientRect()[sizeName.value]\n const containerSize =\n navScroll$.value.getBoundingClientRect()[sizeName.value]\n const currentOffset = navOffset.value\n\n if (containerSize < navSize) {\n scrollable.value = scrollable.value || {}\n scrollable.value.prev = currentOffset\n scrollable.value.next = currentOffset + containerSize < navSize\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize\n }\n } else {\n scrollable.value = false\n if (currentOffset > 0) {\n navOffset.value = 0\n }\n }\n }\n\n const changeTab = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let step = 0\n\n switch (code) {\n case EVENT_CODE.left:\n case EVENT_CODE.up:\n step = -1\n break\n case EVENT_CODE.right:\n case EVENT_CODE.down:\n step = 1\n break\n default:\n return\n }\n\n const tabList = Array.from(\n (\n event.currentTarget as HTMLDivElement\n ).querySelectorAll<HTMLDivElement>('[role=tab]:not(.is-disabled)')\n )\n const currentIndex = tabList.indexOf(event.target as HTMLDivElement)\n let nextIndex = currentIndex + step\n\n if (nextIndex < 0) {\n nextIndex = tabList.length - 1\n } else if (nextIndex >= tabList.length) {\n nextIndex = 0\n }\n\n tabList[nextIndex].focus({ preventScroll: true }) // 改变焦点元素\n tabList[nextIndex].click() // 选中下一个tab\n setFocus()\n }\n\n const setFocus = () => {\n if (focusable.value) isFocus.value = true\n }\n const removeFocus = () => (isFocus.value = false)\n\n const setRefs = (\n el: Element | ComponentPublicInstance | null,\n key: TabPaneName\n ) => {\n tabRefsMap.value[key] = el as HTMLDivElement\n }\n\n const focusActiveTab = async () => {\n await nextTick()\n\n const activeTab = tabRefsMap.value[props.currentName]\n activeTab?.focus({ preventScroll: true })\n }\n\n watch(visibility, (visibility) => {\n if (visibility === 'hidden') {\n focusable.value = false\n } else if (visibility === 'visible') {\n setTimeout(() => (focusable.value = true), 50)\n }\n })\n watch(focused, (focused) => {\n if (focused) {\n setTimeout(() => (focusable.value = true), 50)\n } else {\n focusable.value = false\n }\n })\n\n useResizeObserver(el$, () => {\n rAF(update)\n })\n\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0))\n onUpdated(() => update())\n\n expose({\n scrollToActiveTab,\n removeFocus,\n focusActiveTab,\n tabListRef: nav$,\n tabBarRef,\n scheduleRender: () => triggerRef(tracker),\n })\n\n return () => {\n const scrollBtn = scrollable.value\n ? [\n <span\n class={[\n ns.e('nav-prev'),\n ns.is('disabled', !scrollable.value.prev),\n ]}\n onClick={scrollPrev}\n >\n <ElIcon>\n <ArrowLeft />\n </ElIcon>\n </span>,\n <span\n class={[\n ns.e('nav-next'),\n ns.is('disabled', !scrollable.value.next),\n ]}\n onClick={scrollNext}\n >\n <ElIcon>\n <ArrowRight />\n </ElIcon>\n </span>,\n ]\n : null\n\n const tabs = props.panes.map((pane, index) => {\n const uid = pane.uid\n const disabled = pane.props.disabled\n const tabName = pane.props.name ?? pane.index ?? `${index}`\n const closable =\n !disabled &&\n (pane.isClosable || (pane.props.closable !== false && props.editable))\n pane.index = `${index}`\n\n const btnClose = closable ? (\n <ElIcon\n class=\"is-icon-close\"\n // `onClick` not exist when generate dts\n\n // @ts-ignore\n onClick={(ev: MouseEvent) => emit('tabRemove', pane, ev)}\n >\n <Close />\n </ElIcon>\n ) : null\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label\n const tabindex =\n !disabled && pane.active\n ? (props.tabindex ?? rootTabs.props.tabindex)\n : -1\n\n return (\n <div\n ref={(el) => setRefs(el, tabName)}\n class={[\n ns.e('item'),\n ns.is(rootTabs.props.tabPosition),\n ns.is('active', pane.active),\n ns.is('disabled', disabled),\n ns.is('closable', closable),\n ns.is('focus', isFocus.value),\n ]}\n id={`tab-${tabName}`}\n key={`tab-${uid}`}\n aria-controls={`pane-${tabName}`}\n role=\"tab\"\n aria-selected={pane.active}\n tabindex={tabindex}\n onFocus={() => setFocus()}\n onBlur={() => removeFocus()}\n onClick={(ev: MouseEvent) => {\n removeFocus()\n emit('tabClick', pane, tabName, ev)\n }}\n onKeydown={(ev: KeyboardEvent) => {\n const code = getEventCode(ev)\n if (\n closable &&\n (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', pane, ev)\n }\n }}\n >\n {...[tabLabelContent, btnClose]}\n </div>\n )\n })\n\n // By tracking the value property, we can schedule a job to re-render `TabNav` when needed.\n // Unlike `instance.update`, the scheduler ensures the job is queued only once even if we trigger it multiple times.\n tracker.value\n\n return (\n <div\n ref={el$}\n class={[\n ns.e('nav-wrap'),\n ns.is('scrollable', !!scrollable.value),\n ns.is(rootTabs.props.tabPosition),\n ]}\n >\n {scrollBtn}\n <div class={ns.e('nav-scroll')} ref={navScroll$}>\n {props.panes.length > 0 ? (\n <div\n class={[\n ns.e('nav'),\n ns.is(rootTabs.props.tabPosition),\n ns.is(\n 'stretch',\n props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition)\n ),\n ]}\n ref={nav$}\n style={navStyle.value}\n role=\"tablist\"\n onKeydown={changeTab}\n onWheel={handleWheel}\n >\n {...[\n !props.type ? (\n <TabBar\n ref={tabBarRef}\n tabs={[...props.panes]}\n tabRefs={tabRefsMap.value}\n />\n ) : null,\n tabs,\n ]}\n </div>\n ) : null}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type TabNavInstance = InstanceType<typeof TabNav> & {\n scrollToActiveTab: () => Promise<void>\n removeFocus: () => void\n focusActiveTab: () => void\n scheduleRender: () => void\n tabListRef: HTMLDivElement | undefined\n tabBarRef: TabBarInstance | undefined\n}\n\nexport default TabNav\n"],"mappings":"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"}
|
|
@@ -67,9 +67,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
67
67
|
readonly hideAfter: 200;
|
|
68
68
|
readonly autoClose: 0;
|
|
69
69
|
}>>>, {
|
|
70
|
-
effect: PopperEffect;
|
|
71
|
-
teleported: boolean;
|
|
72
70
|
offset: number;
|
|
71
|
+
teleported: boolean;
|
|
72
|
+
effect: PopperEffect;
|
|
73
73
|
placement: Placement;
|
|
74
74
|
popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
|
|
75
75
|
visible: boolean | null;
|
|
@@ -116,9 +116,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
116
116
|
"onBefore-show"?: ((...args: any[]) => any) | undefined;
|
|
117
117
|
"onBefore-hide"?: ((...args: any[]) => any) | undefined;
|
|
118
118
|
}, {
|
|
119
|
-
effect: PopperEffect;
|
|
120
|
-
teleported: boolean;
|
|
121
119
|
offset: number;
|
|
120
|
+
teleported: boolean;
|
|
121
|
+
effect: PopperEffect;
|
|
122
122
|
placement: Placement;
|
|
123
123
|
popperStyle: string | false | vue.CSSProperties | vue.StyleValue[] | null;
|
|
124
124
|
visible: boolean | null;
|
|
@@ -31,8 +31,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
31
31
|
closeOnPressEscape: boolean;
|
|
32
32
|
targetAreaClickable: boolean;
|
|
33
33
|
}>, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
|
|
34
|
-
close: (current: number) => void;
|
|
35
34
|
change: (current: number) => void;
|
|
35
|
+
close: (current: number) => void;
|
|
36
36
|
"update:modelValue": (value: boolean) => void;
|
|
37
37
|
finish: () => void;
|
|
38
38
|
"update:current": (current: number) => void;
|
|
@@ -53,18 +53,18 @@ declare const __VLS_base: vue.DefineComponent<__VLS_WithDefaults<__VLS_TypeProps
|
|
|
53
53
|
closeOnPressEscape: boolean;
|
|
54
54
|
targetAreaClickable: boolean;
|
|
55
55
|
}>>> & {
|
|
56
|
-
onClose?: ((current: number) => any) | undefined;
|
|
57
56
|
onChange?: ((current: number) => any) | undefined;
|
|
57
|
+
onClose?: ((current: number) => any) | undefined;
|
|
58
58
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
59
59
|
onFinish?: (() => any) | undefined;
|
|
60
60
|
"onUpdate:current"?: ((current: number) => any) | undefined;
|
|
61
61
|
}, {
|
|
62
|
-
closeOnPressEscape: boolean;
|
|
63
62
|
appendTo: string | HTMLElement;
|
|
64
63
|
placement: _floating_ui_utils0.Placement;
|
|
65
64
|
showArrow: boolean;
|
|
66
65
|
gap: TourGap;
|
|
67
66
|
mask: TourMask;
|
|
67
|
+
closeOnPressEscape: boolean;
|
|
68
68
|
showClose: boolean;
|
|
69
69
|
scrollIntoViewOptions: boolean | ScrollIntoViewOptions;
|
|
70
70
|
current: number;
|
|
@@ -408,10 +408,10 @@ declare const __VLS_export: vue.DefineComponent<{
|
|
|
408
408
|
__epPropKey: true;
|
|
409
409
|
};
|
|
410
410
|
}>>, {
|
|
411
|
-
effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
|
|
412
|
-
props: TreeOptionProps;
|
|
413
|
-
teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
|
|
414
411
|
offset: number;
|
|
412
|
+
teleported: EpPropMergeType<BooleanConstructor, unknown, unknown>;
|
|
413
|
+
props: TreeOptionProps;
|
|
414
|
+
effect: EpPropMergeType<(new (...args: any[]) => string) | (() => PopperEffect) | ((new (...args: any[]) => string) | (() => PopperEffect))[], unknown, unknown>;
|
|
415
415
|
valueKey: string;
|
|
416
416
|
modelValue: EpPropMergeType<(new (...args: any[]) => string | number | boolean | Record<string, any> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[]) | (() => EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[] | null) | ((new (...args: any[]) => string | number | boolean | Record<string, any> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[]) | (() => EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown> | EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>[] | null))[], unknown, unknown>;
|
|
417
417
|
debounce: number;
|
|
@@ -106,8 +106,7 @@ function useTree(props, emit) {
|
|
|
106
106
|
const nodeMap = tree.value.treeNodeMap;
|
|
107
107
|
expandedKeySet.value.forEach((key) => {
|
|
108
108
|
const node = nodeMap.get(key);
|
|
109
|
-
|
|
110
|
-
node.expanded = false;
|
|
109
|
+
if (node) node.expanded = false;
|
|
111
110
|
});
|
|
112
111
|
keys.forEach((k) => {
|
|
113
112
|
let node = nodeMap.get(k);
|
|
@@ -198,11 +197,12 @@ function useTree(props, emit) {
|
|
|
198
197
|
(0, vue.watch)(() => props.currentNodeKey, (key) => {
|
|
199
198
|
currentKey.value = key;
|
|
200
199
|
}, { immediate: true });
|
|
201
|
-
(0, vue.watch)(() => props.defaultExpandedKeys, (
|
|
202
|
-
|
|
203
|
-
}
|
|
200
|
+
(0, vue.watch)(() => props.defaultExpandedKeys, (keys) => {
|
|
201
|
+
setExpandedKeys(keys || []);
|
|
202
|
+
});
|
|
204
203
|
(0, vue.watch)(() => props.data, (data) => {
|
|
205
204
|
setData(data);
|
|
205
|
+
setExpandedKeys(props.defaultExpandedKeys || []);
|
|
206
206
|
}, { immediate: true });
|
|
207
207
|
return {
|
|
208
208
|
tree,
|