{"version":3,"file":"menu.mjs","sources":["../../../../../../packages/components/cascader-panel/src/menu.vue"],"sourcesContent":["<template>\n  <b-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    data-test-name=\"cascader-menu\"\n    data-test-variant=\"\"\n    data-test-state=\"\"\n    @mousemove=\"handleMouseMove\"\n    @mouseleave=\"clearHoverZone\"\n  >\n    <b-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      <b-icon size=\"14\" :class=\"ns.is('loading')\">\n        <loading />\n      </b-icon>\n      {{ t('b.cascader.loading') }}\n    </div>\n    <div v-else-if=\"isEmpty\" :class=\"ns.e('empty-text')\">\n      {{ t('b.cascader.noData') }}\n    </div>\n    <svg\n      v-else-if=\"panel?.isHoverMenu\"\n      ref=\"hoverZone\"\n      :class=\"ns.e('hover-zone')\"\n    />\n  </b-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, getCurrentInstance, inject, ref } from 'vue'\nimport BScrollbar from '@bigin/components/scrollbar'\nimport { useLocale, useNamespace } from '@bigin/hooks'\nimport { generateId } from '@bigin/utils'\nimport { Loading } from '@bigin/icons-vue'\nimport BIcon from '@bigin/components/icon'\nimport BCascaderNode 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 '@bigin/utils'\n\nexport default defineComponent({\n  name: 'BCascaderMenu',\n\n  components: {\n    Loading,\n    BIcon,\n    BScrollbar,\n    BCascaderNode,\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 = generateId()\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(() => `cascader-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      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","_createElementBlock","_Fragment","_renderList","_createVNode","_createTextVNode","_toDisplayString","_createCommentVNode"],"mappings":"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"}