You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

0 lines
14 KiB

1 month ago
  1. {"ast":null,"code":"import { defineComponent, getCurrentInstance, inject, ref, computed, resolveComponent, openBlock, createBlock, normalizeClass, withCtx, createElementBlock, Fragment, renderList, createVNode, createTextVNode, toDisplayString, renderSlot, createCommentVNode } from 'vue';\nimport { ElScrollbar } from '../../scrollbar/index.mjs';\nimport { Loading } from '@element-plus/icons-vue';\nimport { ElIcon } from '../../icon/index.mjs';\nimport ElCascaderNode from './node2.mjs';\nimport { CASCADER_PANEL_INJECTION_KEY } from './types.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nconst _sfc_main = defineComponent({\n name: \"ElCascaderMenu\",\n components: {\n Loading,\n ElIcon,\n ElScrollbar,\n ElCascaderNode\n },\n props: {\n nodes: {\n type: Array,\n required: true\n },\n index: {\n type: Number,\n required: true\n }\n },\n setup(props) {\n const instance = getCurrentInstance();\n const ns = useNamespace(\"cascader-menu\");\n const {\n t\n } = useLocale();\n const id = useId();\n let activeNode = null;\n let hoverTimer = null;\n const panel = inject(CASCADER_PANEL_INJECTION_KEY);\n const hoverZone = ref(null);\n const isEmpty = computed(() => !props.nodes.length);\n const isLoading = computed(() => !panel.initialLoaded);\n const menuId = computed(() => `${id.value}-${props.index}`);\n const handleExpand = e => {\n activeNode = e.target;\n };\n const handleMouseMove = e => {\n if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return;\n if (activeNode.contains(e.target)) {\n clearHoverTimer();\n const el = instance.vnode.el;\n const {\n left\n } = el.getBoundingClientRect();\n const {\n offsetWidth,\n offsetHeight\n } = el;\n const startX = e.clientX - left;\n const top = activeNode.offsetTop;\n const bottom = top + activeNode.offsetHeight;\n hoverZone.value.innerHTML = `\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${top} L${offsetWidth} 0 V${top} Z\" />\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M${startX} ${bottom} L${offsetWidth} ${offsetHeight} V${bottom} Z\" />\n `;\n } else if (!hoverTimer) {\n hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold);\n }\n };\n const clearHoverTimer = () => {\n if (!hoverTimer) return;\n clearTimeout(hoverTimer);\n hoverTimer = null;\n };\n const clearHoverZone = () => {\n if (!hoverZone.value) return;\n hoverZone.value.innerHTML = \"\";\n clearHoverTimer();\n };\n return {\n ns,\n panel,\n hoverZone,\n isEmpty,\n isLoading,\n menuId,\n t,\n handleExpand,\n handleMouseMove,\n clearHoverZone\n };\n }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_cascader_node = resolveComponent(\"el-cascader-node\");\n const _component_loading = resolveComponent(\"loading\");\n const _component_el_icon = resolveComponent(\"el-icon\");\n const _component_el_scrollbar = resolveComponent(\"el-scrollbar\");\n return openBlock(), createBlock(_component_el_scrollbar, {\n key: _ctx.menuId,\n tag: \"ul\",\n role: \"menu\",\n class: normalizeClass(_ctx.ns.b()),\n \"wrap-class\": _ctx.ns.e(\"wrap\"),\n \"view-class\": [_ctx.ns.e(\"list\"), _ctx.ns.is(\"empty\", _ctx.isEmpty)],\n onMousemove: _ctx.handleMouseMove,\n onMouseleave: _ctx.clearHoverZone\n }, {\n default: withCtx(() => {\n var _a;\n return [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.nodes, node => {\n return openBlock(), createBlock(_component_el_cascader_no