UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 8.18 kB
{"version":3,"file":"menu.mjs","sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n <el-scrollbar\n :key=\"menuId\"\n tag=\"ul\"\n role=\"menu\"\n :class=\"ns.b()\"\n :wrap-class=\"ns.e('wrap')\"\n :view-class=\"[ns.e('list'), ns.is('empty', isEmpty)]\"\n @mousemove=\"handleMouseMove\"\n @mouseleave=\"clearHoverZone\"\n >\n <el-cascader-node\n v-for=\"node in nodes\"\n :key=\"node.uid\"\n :node=\"node\"\n :menu-id=\"menuId\"\n @expand=\"handleExpand\"\n />\n <div v-if=\"isLoading\" :class=\"ns.e('empty-text')\">\n <el-icon size=\"14\" :class=\"ns.is('loading')\">\n <loading />\n </el-icon>\n {{ t('el.cascader.loading') }}\n </div>\n <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n <slot name=\"empty\">{{ t('el.cascader.noData') }}</slot>\n </div>\n <!-- eslint-disable-next-line vue/html-self-closing -->\n <svg\n v-else-if=\"panel?.isHoverMenu\"\n ref=\"hoverZone\"\n :class=\"ns.e('hover-zone')\"\n ></svg>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport { useId, useLocale, useNamespace } from '@element-plus/hooks'\nimport { Loading } from '@element-plus/icons-vue'\nimport ElIcon from '@element-plus/components/icon'\nimport ElCascaderNode from './node.vue'\nimport { CASCADER_PANEL_INJECTION_KEY } from './types'\n\nimport type { CascaderNode } from './types'\nimport type { PropType } from 'vue'\n\ndefineOptions({\n name: 'ElCascaderMenu',\n})\n\nconst props = defineProps({\n nodes: {\n type: Array as PropType<CascaderNode[]>,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n})\n\nconst instance = getCurrentInstance()!\nconst ns = useNamespace('cascader-menu')\n\nconst { t } = useLocale()\nconst id = useId()\nlet activeNode: HTMLElement\nlet hoverTimer: number | undefined\n\nconst panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\nconst hoverZone = ref<SVGSVGElement>()\n\nconst isEmpty = computed(() => !props.nodes.length)\nconst isLoading = computed(() => !panel.initialLoaded)\nconst menuId = computed(() => `${id.value}-${props.index}`)\n\nconst handleExpand = (e: MouseEvent) => {\n activeNode = e.target as HTMLElement\n}\n\nconst handleMouseMove = (e: MouseEvent) => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return\n\n if (activeNode.contains(e.target as HTMLElement)) {\n clearHoverTimer()\n\n const el = instance.vnode.el as HTMLElement\n const { left } = el.getBoundingClientRect()\n const { offsetWidth, offsetHeight } = el\n const startX = e.clientX - left\n const top = activeNode.offsetTop\n const bottom = top + activeNode.offsetHeight\n const scrollTop = el.querySelector(`.${ns.e('wrap')}`)?.scrollTop || 0\n\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z\" />\n `\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold)\n }\n}\n\nconst clearHoverTimer = () => {\n if (!hoverTimer) return\n clearTimeout(hoverTimer)\n hoverTimer = undefined\n}\n\nconst clearHoverZone = () => {\n if (!hoverZone.value) return\n hoverZone.value.innerHTML = ''\n clearHoverTimer()\n}\n</script>\n"],"names":["_createBlock","_unref","_normalizeClass","_openBlock","_createElementBlock","_Fragment","_renderList","_createVNode","_toDisplayString","_renderSlot","_createTextVNode","_createCommentVNode"],"mappings":"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"}