{"version":3,"file":"menu.vue2.mjs","sources":["../../../../../packages/components/cascade-panel/src/menu.vue"],"sourcesContent":["<template>\n  <el-scrollbar\n    :key=\"menuId\"\n    tag=\"ul\"\n    role=\"menu\"\n    class=\"el-cascade-menu\"\n    wrap-class=\"el-cascade-menu__wrap\"\n    :view-class=\"['el-cascade-menu__list', isEmpty && 'is-empty']\"\n    @mousemove=\"handleMouseMove\"\n    @mouseleave=\"clearHoverZone\"\n  >\n    <el-cascade-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=\"el-cascade-menu__empty-text\">\n      <el-icon size=\"14\" class=\"is-loading\">\n        <loading />\n      </el-icon>\n      加载中...\n    </div>\n    <div v-else-if=\"isEmpty\" class=\"el-cascade-menu__empty-text\">\n      无数据\n    </div>\n    <svg\n      v-else-if=\"panel?.isHoverMenu\"\n      ref=\"hoverZone\"\n      class=\"el-cascade-menu__hover-zone\"\n    ></svg>\n  </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, getCurrentInstance, inject, ref } from 'vue'\nimport ElScrollbar from '@element-ultra/components/scrollbar'\nimport { generateId } from '@element-ultra/utils'\nimport { Loading } from 'icon-ultra'\nimport ElIcon from '@element-ultra/components/icon'\nimport ElCascadeNode from './node.vue'\nimport { Cascade_PANEL_INJECTION_KEY } from './types'\n\nimport type { default as CascadeNode } from './node'\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-ultra/utils'\n\nexport default defineComponent({\n  name: 'ElCascadeMenu',\n\n  components: {\n    Loading,\n    ElIcon,\n    ElScrollbar,\n    ElCascadeNode,\n  },\n\n  props: {\n    nodes: {\n      type: Array as PropType<CascadeNode[]>,\n      required: true,\n    },\n    index: {\n      type: Number,\n      required: true,\n    },\n  },\n\n  setup(props) {\n    const instance = getCurrentInstance()!\n    const id = generateId()\n    let activeNode: Nullable<HTMLElement> = null\n    let hoverTimer: Nullable<number> = null\n\n    const panel = inject(Cascade_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(() => `cascade-menu-${id}-${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      panel,\n      hoverZone,\n      isEmpty,\n      isLoading,\n      menuId,\n      handleExpand,\n      handleMouseMove,\n      clearHoverZone,\n    }\n  },\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;AAgDA,gBAAe,eAAgB,CAAA;AAAA,EAC7B,IAAM,EAAA,eAAA;AAAA,EAEN,UAAY,EAAA;AAAA,IACV,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,GACF;AAAA,EAEA,KAAO,EAAA;AAAA,IACL,KAAO,EAAA;AAAA,MACL,IAAM,EAAA,KAAA;AAAA,MACN,QAAU,EAAA,IAAA;AAAA,KACZ;AAAA,IACA,KAAO,EAAA;AAAA,MACL,IAAM,EAAA,MAAA;AAAA,MACN,QAAU,EAAA,IAAA;AAAA,KACZ;AAAA,GACF;AAAA,EAEA,MAAM,KAAO,EAAA;AACX,IAAA,MAAM,WAAW,kBAAmB,EAAA,CAAA;AACpC,IAAA,MAAM,KAAK,UAAW,EAAA,CAAA;AACtB,IAAA,IAAI,UAAoC,GAAA,IAAA,CAAA;AACxC,IAAA,IAAI,UAA+B,GAAA,IAAA,CAAA;AAEnC,IAAM,MAAA,KAAA,GAAQ,OAAO,2BAA2B,CAAA,CAAA;AAEhD,IAAM,MAAA,SAAA,GAAY,IAA0B,IAAI,CAAA,CAAA;AAEhD,IAAA,MAAM,UAAU,QAAS,CAAA,MAAM,CAAC,KAAA,CAAM,MAAM,MAAM,CAAA,CAAA;AAClD,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,MAAM,CAAC,MAAM,aAAa,CAAA,CAAA;AACrD,IAAA,MAAM,SAAS,QAAS,CAAA,MAAM,CAAgB,aAAA,EAAA,EAAA,CAAA,CAAA,EAAM,MAAM,KAAO,CAAA,CAAA,CAAA,CAAA;AAEjE,IAAM,MAAA,YAAA,GAAe,CAAC,CAAkB,KAAA;AACtC,MAAA,UAAA,GAAa,CAAE,CAAA,MAAA,CAAA;AAAA,KACjB,CAAA;AAEA,IAAM,MAAA,eAAA,GAAkB,CAAC,CAAkB,KAAA;AACzC,MAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,CAAC,UAAA,IAAc,CAAC,SAAU,CAAA,KAAA;AAAO,QAAA,OAAA;AAE3D,MAAA,IAAI,UAAW,CAAA,QAAA,CAAS,CAAE,CAAA,MAAqB,CAAG,EAAA;AAChD,QAAgB,eAAA,EAAA,CAAA;AAEhB,QAAM,MAAA,EAAA,GAAK,SAAS,KAAM,CAAA,EAAA,CAAA;AAC1B,QAAA,MAAM,EAAE,IAAA,EAAS,GAAA,EAAA,CAAG,qBAAsB,EAAA,CAAA;AAC1C,QAAM,MAAA,EAAE,WAAa,EAAA,YAAA,EAAiB,GAAA,EAAA,CAAA;AACtC,QAAM,MAAA,MAAA,GAAS,EAAE,OAAU,GAAA,IAAA,CAAA;AAC3B,QAAA,MAAM,MAAM,UAAW,CAAA,SAAA,CAAA;AACvB,QAAM,MAAA,MAAA,GAAS,MAAM,UAAW,CAAA,YAAA,CAAA;AAEhC,QAAA,SAAA,CAAU,MAAM,SAAY,GAAA,CAAA;AAAA,qEACmC,EAAA,MAAA,CAAA,CAAA,EAAU,QAAQ,WAAkB,CAAA,IAAA,EAAA,GAAA,CAAA;AAAA,qEACpC,EAAA,MAAA,CAAA,CAAA,EAAU,MAAW,CAAA,EAAA,EAAA,WAAA,CAAA,CAAA,EAAe,YAAiB,CAAA,EAAA,EAAA,MAAA,CAAA;AAAA,QAAA,CAAA,CAAA;AAAA,OAEtH,MAAA,IAAW,CAAC,UAAY,EAAA;AACtB,QAAA,UAAA,GAAa,MAAO,CAAA,UAAA;AAAA,UAClB,cAAA;AAAA,UACA,MAAM,MAAO,CAAA,cAAA;AAAA,SACf,CAAA;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,IAAI,CAAC,UAAA;AAAY,QAAA,OAAA;AACjB,MAAA,YAAA,CAAa,UAAU,CAAA,CAAA;AACvB,MAAa,UAAA,GAAA,IAAA,CAAA;AAAA,KACf,CAAA;AAEA,IAAA,MAAM,iBAAiB,MAAM;AAC3B,MAAA,IAAI,CAAC,SAAU,CAAA,KAAA;AAAO,QAAA,OAAA;AACtB,MAAA,SAAA,CAAU,MAAM,SAAY,GAAA,EAAA,CAAA;AAC5B,MAAgB,eAAA,EAAA,CAAA;AAAA,KAClB,CAAA;AACA,IAAO,OAAA;AAAA,MACL,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,cAAA;AAAA,KACF,CAAA;AAAA,GACF;AACF,CAAC,CAAA;;;;"}