{"version":3,"file":"menu.mjs","sources":["../../../../../../packages/components/menu/src/menu.ts"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  h,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  watch,\n  watchEffect,\n} from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport BIcon from '@bigin/components/icon'\nimport { MoreHorizontal } from '@bigin/icons-vue'\nimport {\n  buildProps,\n  definePropType,\n  flattedChildren,\n  isObject,\n  isString,\n  mutable,\n} from '@bigin/utils'\nimport { useNamespace } from '@bigin/hooks'\nimport Menubar from './utils/menu-bar'\nimport BMenuCollapseTransition from './menu-collapse-transition.vue'\nimport BSubMenu from './sub-menu'\nimport { useMenuCssVar } from './use-menu-css-var'\n\nimport type { MenuItemClicked, MenuProvider, SubMenuProvider } from './types'\nimport type { NavigationFailure, Router } from 'vue-router'\nimport type { ExtractPropTypes, VNode, VNodeArrayChildren } from 'vue'\nimport type { UseResizeObserverReturn } from '@vueuse/core'\n\nexport const menuProps = buildProps({\n  mode: {\n    type: String,\n    values: ['horizontal', 'vertical'],\n    default: 'vertical',\n  },\n  defaultActive: {\n    type: String,\n    default: '',\n  },\n  defaultOpeneds: {\n    type: definePropType<string[]>(Array),\n    default: () => mutable([] as const),\n  },\n  uniqueOpened: Boolean,\n  router: Boolean,\n  menuTrigger: {\n    type: String,\n    values: ['hover', 'click'],\n    default: 'hover',\n  },\n  collapse: Boolean,\n  backgroundColor: String,\n  textColor: String,\n  activeTextColor: String,\n  width: String,\n  collapseTransition: {\n    type: Boolean,\n    default: true,\n  },\n  ellipsis: {\n    type: Boolean,\n    default: true,\n  },\n} as const)\nexport type MenuProps = ExtractPropTypes<typeof menuProps>\n\nconst checkIndexPath = (indexPath: unknown): indexPath is string[] =>\n  Array.isArray(indexPath) && indexPath.every((path) => isString(path))\n\nexport const menuEmits = {\n  close: (index: string, indexPath: string[]) =>\n    isString(index) && checkIndexPath(indexPath),\n\n  open: (index: string, indexPath: string[]) =>\n    isString(index) && checkIndexPath(indexPath),\n\n  select: (\n    index: string,\n    indexPath: string[],\n    item: MenuItemClicked,\n    routerResult?: Promise<void | NavigationFailure>\n  ) =>\n    isString(index) &&\n    checkIndexPath(indexPath) &&\n    isObject(item) &&\n    (routerResult === undefined || routerResult instanceof Promise),\n}\nexport type MenuEmits = typeof menuEmits\n\nexport default defineComponent({\n  name: 'BMenu',\n\n  props: menuProps,\n  emits: menuEmits,\n\n  setup(props, { emit, slots, expose }) {\n    const instance = getCurrentInstance()!\n    const router = instance.appContext.config.globalProperties.$router as Router\n    const menu = ref<HTMLUListElement>()\n    const nsMenu = useNamespace('menu')\n    const nsSubMenu = useNamespace('sub-menu')\n\n    // data\n    const sliceIndex = ref(-1)\n\n    const openedMenus = ref<MenuProvider['openedMenus']>(\n      props.defaultOpeneds && !props.collapse\n        ? props.defaultOpeneds.slice(0)\n        : []\n    )\n    const activeIndex = ref<MenuProvider['activeIndex']>(props.defaultActive)\n    const items = ref<MenuProvider['items']>({})\n    const subMenus = ref<MenuProvider['subMenus']>({})\n\n    // computed\n    const isMenuPopup = computed<MenuProvider['isMenuPopup']>(() => {\n      return (\n        props.mode === 'horizontal' ||\n        (props.mode === 'vertical' && props.collapse)\n      )\n    })\n\n    // methods\n    const initMenu = () => {\n      const activeItem = activeIndex.value && items.value[activeIndex.value]\n      if (!activeItem || props.mode === 'horizontal' || props.collapse) return\n\n      const indexPath = activeItem.indexPath\n\n      // expand all subMenus of the menu item\n      indexPath.forEach((index) => {\n        const subMenu = subMenus.value[index]\n        subMenu && openMenu(index, subMenu.indexPath)\n      })\n    }\n\n    const openMenu: MenuProvider['openMenu'] = (index, indexPath) => {\n      if (openedMenus.value.includes(index)) return\n      // collapse all menu that are not under current menu item\n      if (props.uniqueOpened) {\n        openedMenus.value = openedMenus.value.filter((index: string) =>\n          indexPath.includes(index)\n        )\n      }\n      openedMenus.value.push(index)\n      emit('open', index, indexPath)\n    }\n\n    const closeMenu: MenuProvider['closeMenu'] = (index, indexPath) => {\n      const i = openedMenus.value.indexOf(index)\n      if (i !== -1) {\n        openedMenus.value.splice(i, 1)\n      }\n      emit('close', index, indexPath)\n    }\n\n    const handleSubMenuClick: MenuProvider['handleSubMenuClick'] = ({\n      index,\n      indexPath,\n    }) => {\n      const isOpened = openedMenus.value.includes(index)\n\n      if (isOpened) {\n        closeMenu(index, indexPath)\n      } else {\n        openMenu(index, indexPath)\n      }\n    }\n\n    const handleMenuItemClick: MenuProvider['handleMenuItemClick'] = (\n      menuItem\n    ) => {\n      if (props.mode === 'horizontal' || props.collapse) {\n        openedMenus.value = []\n      }\n\n      const { index, indexPath } = menuItem\n      if (index === undefined || indexPath === undefined) return\n\n      if (props.router && router) {\n        const route = menuItem.route || index\n        const routerResult = router.push(route).then((res) => {\n          if (!res) activeIndex.value = index\n          return res\n        })\n        emit(\n          'select',\n          index,\n          indexPath,\n          { index, indexPath, route },\n          routerResult\n        )\n      } else {\n        activeIndex.value = index\n        emit('select', index, indexPath, { index, indexPath })\n      }\n    }\n\n    const updateActiveIndex = (val: string) => {\n      const itemsInData = items.value\n      const item =\n        itemsInData[val] ||\n        (activeIndex.value && itemsInData[activeIndex.value]) ||\n        itemsInData[props.defaultActive]\n\n      if (item) {\n        activeIndex.value = item.index\n      } else {\n        activeIndex.value = val\n      }\n    }\n\n    const calcSliceIndex = () => {\n      if (!menu.value) return -1\n      const items = Array.from(menu.value?.childNodes ?? []).filter(\n        (item) => item.nodeName !== '#text' || item.nodeValue\n      ) as HTMLElement[]\n      const moreItemWidth = 64\n      const paddingLeft = Number.parseInt(\n        getComputedStyle(menu.value!).paddingLeft,\n        10\n      )\n      const paddingRight = Number.parseInt(\n        getComputedStyle(menu.value!).paddingRight,\n        10\n      )\n      const menuWidth = menu.value!.clientWidth - paddingLeft - paddingRight\n      let calcWidth = 0\n      let sliceIndex = 0\n      items.forEach((item, index) => {\n        calcWidth += item.offsetWidth || 0\n        if (calcWidth <= menuWidth - moreItemWidth) {\n          sliceIndex = index + 1\n        }\n      })\n      return sliceIndex === items.length ? -1 : sliceIndex\n    }\n\n    // Common computer monitor FPS is 60Hz, which means 60 redraws per second. Calculation formula: 1000ms/60 ≈ 16.67ms, In order to avoid a certain chance of repeated triggering when `resize`, set wait to 16.67 * 2 = 33.34\n    const debounce = (fn: () => void, wait = 33.34) => {\n      let timmer: ReturnType<typeof setTimeout> | null\n      return () => {\n        timmer && clearTimeout(timmer)\n        timmer = setTimeout(() => {\n          fn()\n        }, wait)\n      }\n    }\n\n    let isFirstTimeRender = true\n    const handleResize = () => {\n      const callback = () => {\n        sliceIndex.value = -1\n        nextTick(() => {\n          sliceIndex.value = calcSliceIndex()\n        })\n      }\n      // execute callback directly when first time resize to avoid shaking\n      isFirstTimeRender ? callback() : debounce(callback)()\n      isFirstTimeRender = false\n    }\n\n    watch(\n      () => props.defaultActive,\n      (currentActive) => {\n        if (!items.value[currentActive]) {\n          activeIndex.value = ''\n        }\n        updateActiveIndex(currentActive)\n      }\n    )\n\n    watch(\n      () => props.collapse,\n      (value) => {\n        if (value) openedMenus.value = []\n      }\n    )\n\n    watch(items.value, initMenu)\n\n    let resizeStopper: UseResizeObserverReturn['stop']\n    watchEffect(() => {\n      if (props.mode === 'horizontal' && props.ellipsis)\n        resizeStopper = useResizeObserver(menu, handleResize).stop\n      else resizeStopper?.()\n    })\n\n    // provide\n    {\n      const addSubMenu: MenuProvider['addSubMenu'] = (item) => {\n        subMenus.value[item.index] = item\n      }\n\n      const removeSubMenu: MenuProvider['removeSubMenu'] = (item) => {\n        delete subMenus.value[item.index]\n      }\n\n      const addMenuItem: MenuProvider['addMenuItem'] = (item) => {\n        items.value[item.index] = item\n      }\n\n      const removeMenuItem: MenuProvider['removeMenuItem'] = (item) => {\n        delete items.value[item.index]\n      }\n      provide<MenuProvider>(\n        'rootMenu',\n        reactive({\n          props,\n          openedMenus,\n          items,\n          subMenus,\n          activeIndex,\n          isMenuPopup,\n\n          addMenuItem,\n          removeMenuItem,\n          addSubMenu,\n          removeSubMenu,\n          openMenu,\n          closeMenu,\n          handleMenuItemClick,\n          handleSubMenuClick,\n        })\n      )\n      provide<SubMenuProvider>(`subMenu:${instance.uid}`, {\n        addSubMenu,\n        removeSubMenu,\n        mouseInChild: ref(false),\n        level: 0,\n      })\n    }\n\n    // lifecycle\n    onMounted(() => {\n      if (props.mode === 'horizontal') {\n        new Menubar(instance.vnode.el!, nsMenu.namespace.value)\n      }\n    })\n\n    {\n      const open = (index: string) => {\n        const { indexPath } = subMenus.value[index]\n        indexPath.forEach((i) => openMenu(i, indexPath))\n      }\n      expose({\n        open,\n        close: closeMenu,\n        handleResize,\n      })\n    }\n\n    return () => {\n      let slot: VNodeArrayChildren = slots.default?.() ?? []\n      const vShowMore: VNode[] = []\n\n      if (props.mode === 'horizontal' && menu.value) {\n        const originalSlot = flattedChildren(slot) as VNodeArrayChildren\n        const slotDefault =\n          sliceIndex.value === -1\n            ? originalSlot\n            : originalSlot.slice(0, sliceIndex.value)\n\n        const slotMore =\n          sliceIndex.value === -1 ? [] : originalSlot.slice(sliceIndex.value)\n\n        if (slotMore?.length && props.ellipsis) {\n          slot = slotDefault\n          vShowMore.push(\n            h(\n              BSubMenu,\n              {\n                index: 'sub-menu-more',\n                class: nsSubMenu.e('hide-arrow'),\n              },\n              {\n                title: () =>\n                  h(\n                    BIcon,\n                    {\n                      class: nsSubMenu.e('icon-more'),\n                    },\n                    { default: () => h(MoreHorizontal) }\n                  ),\n                default: () => slotMore,\n              }\n            )\n          )\n        }\n      }\n\n      const ulStyle = useMenuCssVar(props, 0)\n\n      const vMenu = h(\n        'ul',\n        {\n          key: String(props.collapse),\n          role: 'menubar',\n          ref: menu,\n          style: ulStyle.value,\n          class: {\n            [nsMenu.b()]: true,\n            [nsMenu.m(props.mode)]: true,\n            [nsMenu.m('collapse')]: props.collapse,\n          },\n          dataTestName: 'menu',\n        },\n        [...slot, ...vShowMore]\n      )\n\n      if (props.collapseTransition && props.mode === 'vertical') {\n        return h(BMenuCollapseTransition, () => vMenu)\n      }\n\n      return vMenu\n    }\n  },\n})\n"],"names":["index","items","sliceIndex","Menubar","BSubMenu"],"mappings":"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"}