{"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-all\n      v-if=\"panel.config.needAll\"\n      :model-value=\"isCheckedAll\"\n      :indeterminate=\"isIndeterminate\"\n      is-node-leaf\n      @change=\"onChange\"\n    />\n    <el-cascader-node\n      v-for=\"node in nodes\"\n      :key=\"node.uid\"\n      :node=\"node\"\n      :is-node-leaf=\"node.isLeaf\"\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\">\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 ElCascaderNodeAll from './node.all.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    ElCascaderNodeAll,\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(\n      () => !props.nodes.length || props.nodes.every((node) => !node.isVisible)\n    )\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\n    const checkedList = computed(() => {\n      if (!panel?.config.needAll) return []\n      return props.nodes.filter((item) => item.checked)\n    })\n    const isCheckedAll = computed(() => {\n      return checkedList.value.length === props.nodes.length\n    })\n    const isIndeterminate = computed(() => {\n      return (\n        checkedList.value.length > 0 &&\n        checkedList.value.length < props.nodes.length\n      )\n    })\n    function onChange(checked: boolean) {\n      props.nodes\n        .filter((node) => !node.isDisabled)\n        .forEach((node) => {\n          if (checked === node.checked) return\n\n          node.checked = checked\n          panel.handleCheckChange(node, checked)\n        })\n    }\n    return {\n      isIndeterminate,\n      isCheckedAll,\n      onChange,\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":["_createBlock","_normalizeClass","_openBlock","_createCommentVNode","_createElementBlock","_Fragment","_renderList","_createVNode","_withCtx","_createTextVNode","_toDisplayString"],"mappings":"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"}