{"version":3,"file":"menu.mjs","sources":["../../../../../../packages/components/menu/src/menu.ts"],"sourcesContent":["import {\r\n  defineComponent,\r\n  getCurrentInstance,\r\n  watch,\r\n  computed,\r\n  ref,\r\n  provide,\r\n  onMounted,\r\n  h,\r\n  withDirectives,\r\n  reactive,\r\n  nextTick,\r\n} from 'vue'\r\nimport { Resize } from '@sgui-plus/directives'\r\nimport SgIcon from '@sgui-plus/components/icon'\r\nimport { More } from '@sgui-plus/icons-vue'\r\nimport {\r\n  buildProps,\r\n  definePropType,\r\n} from '@sgui-plus/utils/props'\r\nimport {\r\n  mutable\r\n} from '@sgui-plus/utils/types'\r\nimport {\r\n  isString,\r\n  isObject,\r\n} from '@sgui-plus/utils/util'\r\nimport Menubar from './utils/menu-bar'\r\nimport SgMenuCollapseTransition from './menu-collapse-transition.vue'\r\nimport SgSubMenu from './sub-menu'\r\nimport { useMenuCssVar } from './use-menu-css-var'\r\n\r\nimport type { MenuItemClicked, MenuProvider, SubMenuProvider } from './types'\r\nimport type { NavigationFailure, Router } from 'vue-router'\r\nimport type { VNode, ExtractPropTypes, VNodeNormalizedChildren } from 'vue'\r\n\r\nexport const menuProps = buildProps({\r\n  mode: {\r\n    type: String,\r\n    values: ['horizontal', 'vertical'],\r\n    default: 'vertical',\r\n  },\r\n  openWidth: {\r\n    type: Number,\r\n  },\r\n  collapseWidth: {\r\n    type: Number,\r\n  },\r\n  subMenuMaxHeight: {\r\n    type: Number,\r\n  },\r\n  defaultActive: {\r\n    type: String,\r\n    default: '',\r\n  },\r\n  defaultOpeneds: {\r\n    type: definePropType<string[]>(Array),\r\n    default: () => mutable([] as const),\r\n  },\r\n  uniqueOpened: Boolean,\r\n  router: Boolean,\r\n  menuTrigger: {\r\n    type: String,\r\n    values: ['hover', 'click'],\r\n    default: 'hover',\r\n  },\r\n  collapse: Boolean,\r\n  collapseTransition: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n  showTooltip: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n  ellipsis: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n} as const)\r\nexport type MenuProps = ExtractPropTypes<typeof menuProps>\r\n\r\nconst checkIndexPath = (indexPath: unknown): indexPath is string[] =>\r\n  Array.isArray(indexPath) && indexPath.every((path) => isString(path))\r\n\r\nexport const menuEmits = {\r\n  onClose: (index: string, indexPath?: string[]) => isString(index),\r\n\r\n  onOpen: (index: string, indexPath: string[]) => isString(index) && checkIndexPath(indexPath),\r\n\r\n  onSelect: (\r\n    index: string,\r\n    indexPath: string[],\r\n    item: MenuItemClicked,\r\n    routerResult?: Promise<void | NavigationFailure>\r\n  ) =>\r\n    isString(index) &&\r\n    checkIndexPath(indexPath) &&\r\n    isObject(item) &&\r\n    (routerResult === undefined || routerResult instanceof Promise),\r\n}\r\nexport type MenuEmits = typeof menuEmits\r\nexport default defineComponent({\r\n  name: 'SgMenu',\r\n\r\n  props: menuProps,\r\n  emits: menuEmits,\r\n  setup(props, { emit, slots, expose }) {\r\n    const instance = getCurrentInstance()!\r\n    const router = instance.appContext.config.globalProperties.$router as Router\r\n    const menu = ref<HTMLUListElement>()\r\n\r\n    // data\r\n    const openedMenus = ref<MenuProvider['openedMenus']>(\r\n      props.defaultOpeneds && !props.collapse\r\n        ? props.defaultOpeneds.slice(0)\r\n        : []\r\n    )\r\n    const activeIndex = ref<MenuProvider['activeIndex']>(props.defaultActive)\r\n    const items = ref<MenuProvider['items']>({})\r\n    const subMenus = ref<MenuProvider['subMenus']>({})\r\n\r\n    // computed\r\n    const isMenuPopup = computed<MenuProvider['isMenuPopup']>(() => {\r\n      return (\r\n        props.mode === 'horizontal' ||\r\n        (props.mode === 'vertical' && props.collapse)\r\n      )\r\n    })\r\n\r\n    // methods\r\n    const initMenu = () => {\r\n      const activeItem = activeIndex.value && items.value[activeIndex.value]\r\n      if (!activeItem || props.mode === 'horizontal' || props.collapse) return\r\n\r\n      const indexPath = activeItem.indexPath\r\n\r\n      // 展开该菜单项的路径上所有子菜单\r\n      // expand all subMenus of the menu item\r\n      indexPath.forEach((index) => {\r\n        const subMenu = subMenus.value[index]\r\n        subMenu && openMenu(index, subMenu.indexPath)\r\n      })\r\n    }\r\n\r\n    const openMenu: MenuProvider['openMenu'] = (index, indexPath) => {\r\n      if (openedMenus.value.includes(index)) return\r\n      // 将不在该菜单路径下的其余菜单收起\r\n      // collapse all menu that are not under current menu item\r\n      if (props.uniqueOpened) {\r\n        openedMenus.value = openedMenus.value.filter((index: string) =>\r\n          indexPath.includes(index)\r\n        )\r\n      }\r\n      openedMenus.value.push(index)\r\n      emit('onOpen', index, indexPath)\r\n    }\r\n\r\n    const closeMenu: MenuProvider['closeMenu'] = (index, indexPath) => {\r\n      const i = openedMenus.value.indexOf(index)\r\n      if (i !== -1) {\r\n        openedMenus.value.splice(i, 1)\r\n      }\r\n      emit('onClose', index, indexPath)\r\n    }\r\n\r\n    const handleSubMenuClick: MenuProvider['handleSubMenuClick'] = ({\r\n      index,\r\n      indexPath,\r\n    }) => {\r\n      const isOpened = openedMenus.value.includes(index)\r\n\r\n      if (isOpened) {\r\n        closeMenu(index, indexPath)\r\n      } else {\r\n        openMenu(index, indexPath)\r\n      }\r\n    }\r\n\r\n    const handleMenuItemClick: MenuProvider['handleMenuItemClick'] = (\r\n      menuItem\r\n    ) => {\r\n      if (props.mode === 'horizontal' || props.collapse) {\r\n        openedMenus.value = []\r\n      }\r\n\r\n      const { index, indexPath } = menuItem\r\n      if (index === undefined || indexPath === undefined) return\r\n\r\n      if (props.router && router) {\r\n        const route = menuItem.route || index\r\n        const routerResult = router.push(route).then((res) => {\r\n          if (!res) activeIndex.value = index\r\n          return res\r\n        })\r\n        emit(\r\n          'onSelect',\r\n          index,\r\n          indexPath,\r\n          { index, indexPath, route },\r\n          routerResult\r\n        )\r\n      } else {\r\n        activeIndex.value = index\r\n        emit('onSelect', index, indexPath, { index, indexPath })\r\n      }\r\n    }\r\n\r\n    const updateActiveIndex = (val: string) => {\r\n      const itemsInData = items.value\r\n      const item =\r\n        itemsInData[val] ||\r\n        (activeIndex.value && itemsInData[activeIndex.value]) ||\r\n        itemsInData[props.defaultActive]\r\n\r\n      if (item) {\r\n        activeIndex.value = item.index\r\n        initMenu()\r\n      } else {\r\n        activeIndex.value = val\r\n      }\r\n    }\r\n    const handleResize = () => {\r\n      nextTick(() => instance.proxy!.$forceUpdate())\r\n    }\r\n\r\n    watch(\r\n      () => props.defaultActive,\r\n      (currentActive) => {\r\n        if (!items.value[currentActive]) {\r\n          activeIndex.value = ''\r\n        }\r\n        updateActiveIndex(currentActive)\r\n      }\r\n    )\r\n    watch(() => props.defaultOpeneds, (newValue) => {\r\n      openedMenus.value = JSON.parse(JSON.stringify(newValue))\r\n      initMenu()\r\n    },{deep: true});\r\n\r\n    watch(items.value, () => initMenu())\r\n\r\n    watch(\r\n      () => props.collapse,\r\n      (value) => {\r\n        if (value) openedMenus.value = []\r\n      }\r\n    )\r\n\r\n    // provide\r\n    {\r\n      const addSubMenu: MenuProvider['addSubMenu'] = (item) => {\r\n        subMenus.value[item.index] = item\r\n      }\r\n\r\n      const removeSubMenu: MenuProvider['removeSubMenu'] = (item) => {\r\n        delete subMenus.value[item.index]\r\n      }\r\n\r\n      const addMenuItem: MenuProvider['addMenuItem'] = (item) => {\r\n        items.value[item.index] = item\r\n      }\r\n\r\n      const removeMenuItem: MenuProvider['removeMenuItem'] = (item) => {\r\n        delete items.value[item.index]\r\n      }\r\n\r\n      provide<MenuProvider>(\r\n        'rootMenu',\r\n        reactive({\r\n          props,\r\n          openedMenus,\r\n          items,\r\n          subMenus,\r\n          activeIndex,\r\n          isMenuPopup,\r\n\r\n          addMenuItem,\r\n          removeMenuItem,\r\n          addSubMenu,\r\n          removeSubMenu,\r\n          openMenu,\r\n          closeMenu,\r\n          handleMenuItemClick,\r\n          handleSubMenuClick,\r\n        })\r\n      )\r\n\r\n      provide<SubMenuProvider>(`subMenu:${instance.uid}`, {\r\n        addSubMenu,\r\n        removeSubMenu,\r\n        mouseInChild: ref(false),\r\n      })\r\n    }\r\n\r\n    // lifecycle\r\n    onMounted(() => {\r\n      initMenu()\r\n      if (props.mode === 'horizontal') {\r\n        new Menubar(instance.vnode.el!)\r\n      }\r\n    })\r\n\r\n    {\r\n      const open = (index: string) => {\r\n        const { indexPath } = subMenus.value[index]\r\n        indexPath.forEach((i) => openMenu(i, indexPath))\r\n      }\r\n      expose({\r\n        open,\r\n        close: closeMenu,\r\n        handleResize,\r\n      })\r\n    }\r\n\r\n    const flattedChildren = (children: VNodeNormalizedChildren) => {\r\n      const vnodes = Array.isArray(children) ? children : [children]\r\n      const result: any[] = []\r\n      vnodes.forEach((child: any) => {\r\n        if (Array.isArray(child.children)) {\r\n          result.push(...flattedChildren(child.children))\r\n        } else {\r\n          result.push(child)\r\n        }\r\n      })\r\n      return result\r\n    }\r\n\r\n    const useVNodeResize = (vnode: VNode) =>\r\n      props.mode === 'horizontal'\r\n        ? withDirectives(vnode, [[Resize, handleResize]])\r\n        : vnode\r\n    return () => {\r\n      let slot = slots.default?.() ?? []\r\n      const vShowMore: VNode[] = []\r\n\r\n      if (props.mode === 'horizontal' && menu.value) {\r\n        const items = Array.from(menu.value?.childNodes ?? []).filter(\r\n          (item) => item.nodeName !== '#text' || item.nodeValue\r\n        ) as HTMLElement[]\r\n        const originalSlot = flattedChildren(slot)\r\n        const moreItemWidth = 64\r\n        const paddingLeft = Number.parseInt(\r\n          getComputedStyle(menu.value).paddingLeft,\r\n          10\r\n        )\r\n        const paddingRight = Number.parseInt(\r\n          getComputedStyle(menu.value).paddingRight,\r\n          10\r\n        )\r\n        const menuWidth = menu.value.clientWidth - paddingLeft - paddingRight\r\n        let calcWidth = 0\r\n        let sliceIndex = 0\r\n        items.forEach((item, index) => {\r\n          calcWidth += item.offsetWidth || 0\r\n          if (calcWidth <= menuWidth - moreItemWidth) {\r\n            sliceIndex = index + 1\r\n          }\r\n        })\r\n        const slotDefault = originalSlot.slice(0, sliceIndex)\r\n        const slotMore = originalSlot.slice(sliceIndex)\r\n        if (slotMore?.length && props.ellipsis) {\r\n          slot = slotDefault\r\n          vShowMore.push(\r\n            h(\r\n              SgSubMenu,\r\n              {\r\n                index: 'sub-menu-more',\r\n                class: 'sg-sub-menu__hide-arrow',\r\n              },\r\n              {\r\n                title: () =>\r\n                  h(\r\n                    SgIcon,\r\n                    {\r\n                      class: ['sg-sub-menu__icon-more'],\r\n                    },\r\n                    { default: () => h(More) }\r\n                  ),\r\n                default: () => slotMore,\r\n              }\r\n            )\r\n          )\r\n        }\r\n      }\r\n\r\n      const ulStyle = useMenuCssVar(props)\r\n\r\n      const resizeMenu = (vNode: VNode) =>\r\n        props.ellipsis ? useVNodeResize(vNode) : vNode\r\n\r\n      const vMenu = resizeMenu(\r\n        h(\r\n          'ul',\r\n          {\r\n            key: String(props.collapse),\r\n            role: 'menubar',\r\n            ref: menu,\r\n            style: {\r\n              ...ulStyle.value,\r\n              width: props.mode === 'vertical' && props.collapse && props.collapseWidth || props.openWidth  ? `${props.collapseWidth ? props.collapseWidth : props.openWidth}px${props.collapseWidth ? '!important' : ''}` : '',\r\n            },\r\n            class: {\r\n              'sg-menu': true,\r\n              'sg-menu--horizontal': props.mode === 'horizontal',\r\n              'sg-menu--vertical': props.mode === 'vertical',\r\n              'sg-menu--collapse': props.collapse,\r\n            },\r\n          },\r\n          [...slot.map((vnode) => resizeMenu(vnode)), ...vShowMore]\r\n        )\r\n      )\r\n\r\n      if (props.collapseTransition && props.mode === 'vertical') {\r\n        return h(SgMenuCollapseTransition, () => vMenu)\r\n      }\r\n\r\n      return vMenu\r\n    }\r\n  },\r\n})\r\n"],"names":["Menubar","SgSubMenu"],"mappings":"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"}