{"version":3,"file":"menu.js","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    <svg\n      v-else-if=\"panel?.isHoverMenu\"\n      ref=\"hoverZone\"\n      :class=\"ns.e('hover-zone')\"\n    />\n  </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, 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 { default as CascaderNode } from './node'\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-plus/utils'\n\nexport default defineComponent({\n  name: 'ElCascaderMenu',\n\n  components: {\n    Loading,\n    ElIcon,\n    ElScrollbar,\n    ElCascaderNode,\n  },\n\n  props: {\n    nodes: {\n      type: Array as PropType<CascaderNode[]>,\n      required: true,\n    },\n    index: {\n      type: Number,\n      required: true,\n    },\n  },\n\n  setup(props) {\n    const instance = getCurrentInstance()!\n    const ns = useNamespace('cascader-menu')\n\n    const { t } = useLocale()\n    const id = useId()\n    let activeNode: Nullable<HTMLElement> = null\n    let hoverTimer: Nullable<number> = null\n\n    const panel = inject(CASCADER_PANEL_INJECTION_KEY)!\n\n    const hoverZone = ref<null | SVGSVGElement>(null)\n\n    const isEmpty = computed(() => !props.nodes.length)\n    const isLoading = computed(() => !panel.initialLoaded)\n    const menuId = computed(() => `${id.value}-${props.index}`)\n\n    const handleExpand = (e: MouseEvent) => {\n      activeNode = e.target as HTMLElement\n    }\n\n    const 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\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(\n          clearHoverZone,\n          panel.config.hoverThreshold\n        )\n      }\n    }\n\n    const clearHoverTimer = () => {\n      if (!hoverTimer) return\n      clearTimeout(hoverTimer)\n      hoverTimer = null\n    }\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})\n</script>\n"],"names":["defineComponent","Loading","ElIcon","ElScrollbar","ElCascaderNode","getCurrentInstance","useNamespace","useLocale","useId","inject","CASCADER_PANEL_INJECTION_KEY","ref","computed","_createBlock","_normalizeClass","_openBlock","_createElementBlock","_Fragment","_renderList","_createVNode","_withCtx","_createTextVNode","_toDisplayString","_renderSlot"],"mappings":"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"}