{"version":3,"file":"menu.mjs","sources":["../../../components/menu/menu.tsx"],"sourcesContent":["import { MenuItem } from '@/components/menu-item'\r\nimport { MenuGroup } from '@/components/menu-group'\r\nimport { Overflow } from '@/components/overflow'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  nextTick,\r\n  onMounted,\r\n  provide,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { callIfFunc, isDefined } from '@vexip-ui/utils'\r\nimport MenuRest from './menu-rest'\r\nimport { menuProps } from './props'\r\nimport { MENU_STATE } from './symbol'\r\n\r\nimport type { VNode } from 'vue'\r\nimport type { RouteLocationRaw, RouteRecordRaw } from 'vue-router'\r\nimport type {\r\n  MenuArrowSlotParams,\r\n  MenuItemState,\r\n  MenuMarkerType,\r\n  MenuOptions,\r\n  MenuState,\r\n} from './symbol'\r\n\r\nconst menuMarkerTypes = Object.freeze<MenuMarkerType[]>(['top', 'right', 'bottom', 'left', 'none'])\r\n\r\nexport default defineComponent({\r\n  name: 'Menu',\r\n  props: menuProps,\r\n  emits: ['update:active'],\r\n  setup(_props, { slots, emit, expose }) {\r\n    const props = useProps('menu', _props, {\r\n      active: {\r\n        default: null,\r\n        static: true,\r\n      },\r\n      accordion: false,\r\n      markerType: {\r\n        default: 'right',\r\n        validator: value => menuMarkerTypes.includes(value),\r\n      },\r\n      reduced: false,\r\n      horizontal: false,\r\n      transfer: false,\r\n      trigger: 'hover',\r\n      groupType: {\r\n        default: 'collapse',\r\n        validator: value => ['collapse', 'dropdown'].includes(value),\r\n      },\r\n      tooltipReverse: null,\r\n      options: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      router: null,\r\n      manualRoute: false,\r\n      indent: null,\r\n      arrow: null,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const nh = useNameHelper('menu')\r\n    const menuItemSet = new Set<MenuItemState>()\r\n    const currentActive = ref(props.active)\r\n    const isReduced = ref(false)\r\n\r\n    const wrapper = ref<HTMLElement>()\r\n    const rest = ref<InstanceType<typeof MenuRest>>()\r\n\r\n    const markerType = computed(() => {\r\n      if (props.horizontal && (props.markerType === 'left' || props.markerType === 'right')) {\r\n        return 'bottom'\r\n      } else if (\r\n        !props.horizontal &&\r\n        (props.markerType === 'top' || props.markerType === 'bottom')\r\n      ) {\r\n        return 'right'\r\n      } else {\r\n        return props.markerType ?? (props.horizontal ? 'bottom' : 'right')\r\n      }\r\n    })\r\n    const className = computed(() => {\r\n      return [\r\n        nh.b(),\r\n        nh.bs('vars'),\r\n        nh.bm(`marker-${markerType.value}`),\r\n        {\r\n          [nh.bm('inherit')]: props.inherit,\r\n          [nh.bm('reduced')]: isReduced.value,\r\n          [nh.bm('dropdown')]: props.groupType === 'dropdown',\r\n          [nh.bm('horizontal')]: props.horizontal,\r\n        },\r\n      ]\r\n    })\r\n    const style = computed(() => {\r\n      const style: Record<string, string> = {}\r\n\r\n      if (isDefined(props.indent)) {\r\n        style[nh.cv('indent-width')] =\r\n          typeof props.indent === 'number' ? `${props.indent}px` : props.indent\r\n      }\r\n\r\n      return style\r\n    })\r\n    const menus = computed(() => {\r\n      if (props.options?.length) {\r\n        return props.options\r\n      }\r\n\r\n      const routes = props.router?.options.routes\r\n\r\n      if (!routes?.length) {\r\n        return []\r\n      }\r\n\r\n      return parseRoutesToMenus(routes)\r\n    })\r\n    const currentRoute = computed(() => props.router?.currentRoute.value)\r\n\r\n    provide<MenuState>(\r\n      MENU_STATE,\r\n      reactive({\r\n        currentActive,\r\n        isReduced,\r\n        horizontal: toRef(props, 'horizontal'),\r\n        accordion: toRef(props, 'accordion'),\r\n        groupType: toRef(props, 'groupType'),\r\n        tooltipReverse: toRef(props, 'tooltipReverse'),\r\n        transfer: toRef(props, 'transfer'),\r\n        trigger: toRef(props, 'trigger'),\r\n        markerType,\r\n        arrow: toRef(props, 'arrow'),\r\n        handleSelect,\r\n        handleExpand,\r\n        increaseItem,\r\n        decreaseItem,\r\n        doForEachItem,\r\n        renderItemArrow,\r\n      }),\r\n    )\r\n\r\n    watch(\r\n      () => props.active,\r\n      value => {\r\n        if (value !== currentActive.value) {\r\n          currentActive.value = value\r\n        }\r\n      },\r\n    )\r\n    watch(\r\n      () => props.reduced,\r\n      value => {\r\n        if (props.horizontal) return\r\n\r\n        if (value) {\r\n          handleMenuReduce()\r\n        } else {\r\n          handleMenuExpand()\r\n        }\r\n      },\r\n    )\r\n    watch(currentRoute, value => {\r\n      if (!props.manualRoute && value) {\r\n        currentActive.value = (value.meta?.label as string) ?? value.path\r\n      }\r\n    })\r\n\r\n    onMounted(() => {\r\n      nextTick(() => {\r\n        if (!props.horizontal && props.reduced) handleMenuReduce()\r\n      })\r\n\r\n      if (props.router && !props.manualRoute && !currentActive.value) {\r\n        const route = currentRoute.value\r\n\r\n        if (route) {\r\n          currentActive.value = (route.meta?.label as string) ?? currentRoute.value.path\r\n        }\r\n      }\r\n    })\r\n\r\n    expose({ expandItemByLabel })\r\n\r\n    function parseRoutesToMenus(routes: Readonly<RouteRecordRaw[]>) {\r\n      const root: MenuOptions = { label: '', children: [] }\r\n      const loop = Array.from(routes).map(route => ({ parent: root, route }))\r\n\r\n      while (loop.length) {\r\n        const { parent, route } = loop.shift()!\r\n        const routeMeta = (route.meta || {}) as any\r\n\r\n        if (routeMeta.menu === false) {\r\n          continue\r\n        }\r\n\r\n        const options = {\r\n          ...routeMeta,\r\n          route,\r\n          label: routeMeta.label || route.path,\r\n          name: routeMeta.name || route.name,\r\n        } as MenuOptions\r\n\r\n        if (!parent.children) {\r\n          parent.children = []\r\n        }\r\n\r\n        parent.children.push(options)\r\n\r\n        if (route.children) {\r\n          loop.push(...route.children.map(route => ({ parent: options, route })))\r\n        }\r\n      }\r\n\r\n      return root.children!\r\n    }\r\n\r\n    function increaseItem(state: MenuItemState) {\r\n      menuItemSet.add(state)\r\n    }\r\n\r\n    function decreaseItem(state: MenuItemState) {\r\n      menuItemSet.delete(state)\r\n    }\r\n\r\n    function doForEachItem(cb: (item: MenuItemState) => void) {\r\n      for (const item of menuItemSet) {\r\n        cb(item)\r\n      }\r\n    }\r\n\r\n    function handleSelect(label: string, meta: Record<string, any>, route?: RouteLocationRaw) {\r\n      if (currentActive.value !== label) {\r\n        currentActive.value = label\r\n\r\n        emit('update:active', label)\r\n        emitEvent(props.onSelect, label, meta)\r\n\r\n        if (!props.manualRoute && props.router && route) {\r\n          props.router.push(route)\r\n        }\r\n      }\r\n    }\r\n\r\n    function handleExpand(label: string, expanded: boolean, meta: Record<string, any>) {\r\n      if (expanded) {\r\n        emitEvent(props.onExpand, label, meta)\r\n      } else {\r\n        emitEvent(props.onReduce, label, meta)\r\n      }\r\n    }\r\n\r\n    function handleMenuReduce() {\r\n      if (props.horizontal) return\r\n\r\n      let firstExpandedItem: MenuItemState | null = null\r\n\r\n      for (const item of menuItemSet) {\r\n        item.cachedExpanded = item.showGroup\r\n\r\n        if (!firstExpandedItem && item.showGroup) {\r\n          firstExpandedItem = item\r\n        }\r\n\r\n        item.toggleGroupExpanded(false)\r\n      }\r\n\r\n      isReduced.value = true\r\n    }\r\n\r\n    function handleMenuExpand() {\r\n      if (props.horizontal) return\r\n\r\n      isReduced.value = false\r\n\r\n      if (wrapper.value) {\r\n        const el = wrapper.value\r\n        const callback = () => {\r\n          requestAnimationFrame(() => {\r\n            el.removeEventListener('transitionend', callback)\r\n\r\n            const selectedItem = Array.from(menuItemSet).find(\r\n              item => item.label === currentActive.value,\r\n            )\r\n\r\n            requestAnimationFrame(() => {\r\n              requestAnimationFrame(() => {\r\n                for (const item of menuItemSet) {\r\n                  item.groupExpanded = item.cachedExpanded\r\n                }\r\n\r\n                if (selectedItem) {\r\n                  let parent = selectedItem.parentState\r\n\r\n                  while (parent) {\r\n                    parent.groupExpanded = true\r\n                    parent = parent.parentState\r\n                  }\r\n                }\r\n              })\r\n            })\r\n          })\r\n        }\r\n\r\n        el.addEventListener('transitionend', callback)\r\n      }\r\n    }\r\n\r\n    function expandItemByLabel(label: string) {\r\n      for (const item of menuItemSet) {\r\n        if (item.label === label) {\r\n          item.toggleGroupExpanded(true, true)\r\n        }\r\n      }\r\n    }\r\n\r\n    function renderItemArrow(params: MenuArrowSlotParams, renderDefault: () => VNode) {\r\n      return renderSlot(slots, 'arrow', { ...params }, () => [\r\n        <Renderer renderer={props.slots.arrow} data={params}>\r\n          {renderDefault()}\r\n        </Renderer>,\r\n      ])\r\n    }\r\n\r\n    function renderMenuItem(item: MenuOptions) {\r\n      return (\r\n        <MenuItem\r\n          label={item.label}\r\n          icon={item.icon}\r\n          icon-props={item.iconProps}\r\n          disabled={item.disabled}\r\n          children={item.children}\r\n          route={item.route}\r\n          meta={item.meta}\r\n        >\r\n          {item.name ? callIfFunc(item.name) : item.label}\r\n        </MenuItem>\r\n      )\r\n    }\r\n\r\n    function renderMenus() {\r\n      return menus.value.map(menu =>\r\n        menu.group ? (\r\n          <MenuGroup key={menu.label} label={menu.name ? callIfFunc(menu.name) : menu.label}>\r\n            {menu.children?.length ? menu.children.map(renderMenuItem) : null}\r\n          </MenuGroup>\r\n        ) : (\r\n          renderMenuItem(menu)\r\n        ),\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      return (\r\n        <ul ref={wrapper} class={className.value} role={'menu'} tabindex={-1} style={style.value}>\r\n          {renderSlot(slots, 'default', {}, () => {\r\n            return props.horizontal\r\n              ? [\r\n                <Overflow class={nh.be('overflow')} inherit key={0}>\r\n                  {{\r\n                    default: renderMenus,\r\n                    counter: ({ count }: { count: number }) => (\r\n                      <MenuRest ref={rest} menus={menus.value.slice(-count)}></MenuRest>\r\n                    ),\r\n                  }}\r\n                </Overflow>,\r\n              ]\r\n              : renderMenus()\r\n          })}\r\n        </ul>\r\n      )\r\n    }\r\n  },\r\n})\r\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","menuMarkerTypes","freeze","defineComponent","name","props","menuProps","emits","setup","_props","slots","emit","expose","useProps","active","default","static","accordion","markerType","validator","value","includes","reduced","horizontal","transfer","trigger","groupType","tooltipReverse","options","router","manualRoute","indent","arrow","nh","useNameHelper","menuItemSet","Set","currentActive","ref","isReduced","wrapper","rest","computed","className","b","bs","bm","inherit","style","isDefined","cv","menus","length","routes","parseRoutesToMenus","currentRoute","provide","MENU_STATE","reactive","toRef","handleSelect","handleExpand","increaseItem","decreaseItem","doForEachItem","renderItemArrow","watch","handleMenuReduce","handleMenuExpand","meta","label","path","onMounted","nextTick","route","expandItemByLabel","root","children","loop","Array","from","map","parent","shift","routeMeta","menu","push","state","add","delete","cb","item","emitEvent","onSelect","expanded","onExpand","onReduce","firstExpandedItem","cachedExpanded","showGroup","toggleGroupExpanded","el","callback","requestAnimationFrame","removeEventListener","selectedItem","find","groupExpanded","parentState","addEventListener","params","renderDefault","renderSlot","_slot","_createVNode","Renderer","renderMenuItem","MenuItem","icon","iconProps","disabled","callIfFunc","renderMenus","group","MenuGroup","Overflow","be","counter","count","MenuRest","slice"],"mappings":"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"}