{"version":3,"file":"menu-item.mjs","sources":["../../../components/menu/menu-item.tsx"],"sourcesContent":["import { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Popper } from '@/components/popper'\r\nimport { Tooltip } from '@/components/tooltip'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport {\r\n  computed,\r\n  defineAsyncComponent,\r\n  defineComponent,\r\n  inject,\r\n  nextTick,\r\n  onBeforeUnmount,\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 {\r\n  createIconProp,\r\n  emitEvent,\r\n  useHoverDelay,\r\n  useIcons,\r\n  useNameHelper,\r\n  useProps,\r\n} from '@vexip-ui/config'\r\nimport { useClickOutside, usePopper, useRtl, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { callIfFunc } from '@vexip-ui/utils'\r\nimport { menuItemProps } from './props'\r\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\r\n\r\n// For types build\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nimport type { RouteLocationRaw } from 'vue-router'\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { Placement } from '@vexip-ui/hooks'\r\nimport type { MenuOptions } from './symbol'\r\n\r\nconst MenuGroup = defineAsyncComponent(() => import('./menu-group'))\r\n\r\nconst MenuItem = defineComponent({\r\n  name: 'MenuItem',\r\n  props: menuItemProps,\r\n  emits: [],\r\n  setup(_props, { slots, expose }) {\r\n    const props = useProps('menuItem', _props, {\r\n      label: {\r\n        default: null,\r\n        static: true,\r\n      },\r\n      icon: createIconProp(),\r\n      iconProps: null,\r\n      disabled: false,\r\n      transfer: null,\r\n      trigger: null,\r\n      transitionName: null,\r\n      meta: null,\r\n      children: {\r\n        default: () => [],\r\n        static: true,\r\n      },\r\n      route: null,\r\n      arrow: null,\r\n      slots: () => ({}),\r\n    })\r\n\r\n    const menuState = inject(MENU_STATE, null)\r\n    const parentItemState = inject(MENU_ITEM_STATE, null)\r\n    const groupState = inject(MENU_GROUP_STATE, null)\r\n\r\n    const nh = useNameHelper('menu')\r\n    const icons = useIcons()\r\n    const hoverDelay = useHoverDelay()\r\n\r\n    const { isRtl } = useRtl()\r\n\r\n    const baseClass = nh.be('item')\r\n    const placement = ref<Placement>(isRtl.value ? 'left-start' : 'right-start')\r\n    const groupExpanded = ref(false)\r\n    const selected = ref(false)\r\n    const sonSelected = ref(false)\r\n    const popperShow = ref(false)\r\n\r\n    const indent = computed(() => (parentItemState?.indent ?? 0) + 1)\r\n    const propTransfer = computed(() => props.transfer ?? menuState?.transfer ?? false)\r\n    const inTransfer = computed(() => (parentItemState ? parentItemState.transfer : false))\r\n    const transfer = computed(() => !inTransfer.value && propTransfer.value)\r\n    const markerType = computed(() => menuState?.markerType || 'right')\r\n\r\n    const wrapper = useClickOutside(handleClickOutside)\r\n    const popper = ref<PopperExposed>()\r\n    const { reference, transferTo, updatePopper } = usePopper({\r\n      placement,\r\n      transfer,\r\n      wrapper,\r\n      popper: computed(() => popper.value?.wrapper),\r\n      shift: { crossAxis: true },\r\n    })\r\n\r\n    const isGroup = computed(() => !!(slots.group || props.children?.length))\r\n    const showGroup = computed(() => isGroup.value && groupExpanded.value)\r\n    const className = computed(() => {\r\n      return {\r\n        [baseClass]: true,\r\n        [`${baseClass}--disabled`]: props.disabled,\r\n        [`${baseClass}--group-visible`]: showGroup.value,\r\n        [`${baseClass}--selected`]: selected.value,\r\n        [`${baseClass}--no-icon`]: !props.icon,\r\n        [`${baseClass}--son-selected`]: sonSelected.value,\r\n      }\r\n    })\r\n    const labelStyle = computed(() => {\r\n      if (menuState?.horizontal || parentItemState?.isUsePopper) {\r\n        return {}\r\n      }\r\n\r\n      const indentWidth = nh.gcv('indent-width')\r\n      const multiplier =\r\n        indent.value + (menuState?.isReduced ? 0 : (groupState?.indent ?? 0)) * 0.25\r\n\r\n      return {\r\n        paddingInlineStart:\r\n          parentItemState && parentItemState.isUsePopper\r\n            ? undefined\r\n            : `calc(${indentWidth} * ${multiplier})`,\r\n      }\r\n    })\r\n    const isUsePopper = computed(() => {\r\n      return (\r\n        (menuState && (menuState.horizontal || menuState.groupType === 'dropdown')) ||\r\n        (isGroup.value && menuState?.isReduced && !parentItemState) ||\r\n        !!parentItemState?.isUsePopper\r\n      )\r\n    })\r\n    const tooltipDisabled = computed(() => {\r\n      return (\r\n        isGroup.value || !!(parentItemState?.isUsePopper || (menuState && !menuState.isReduced))\r\n      )\r\n    })\r\n    const tooltipReverse = computed(() => !!menuState?.tooltipReverse)\r\n    const isHorizontal = computed(() => menuState?.horizontal && !parentItemState)\r\n    const transition = computed(() => {\r\n      return (props.transitionName ?? isHorizontal.value) ? nh.ns('drop') : nh.ns('zoom')\r\n    })\r\n    const dropTrigger = computed(() => props.trigger || menuState?.trigger || 'hover')\r\n\r\n    const itemState = reactive({\r\n      el: wrapper,\r\n      label: toRef(props, 'label'),\r\n      indent,\r\n      groupExpanded,\r\n      showGroup,\r\n      isUsePopper,\r\n      parentState: parentItemState,\r\n      transfer: computed(() => inTransfer.value || propTransfer.value),\r\n      cachedExpanded: groupExpanded.value,\r\n      updateSonSelected,\r\n      toggleGroupExpanded,\r\n      handleMouseEnter,\r\n      handleMouseLeave,\r\n    })\r\n\r\n    provide(MENU_ITEM_STATE, itemState)\r\n\r\n    watch(\r\n      showGroup,\r\n      value => {\r\n        if (value && isUsePopper.value) {\r\n          popperShow.value = true\r\n          updatePopper()\r\n        }\r\n      },\r\n      { immediate: true },\r\n    )\r\n    watch(selected, value => {\r\n      if (value) {\r\n        emitEvent(props.onSelect)\r\n      }\r\n\r\n      menuState?.doForEachItem(item => item.updateSonSelected(false, false))\r\n      value &&\r\n        nextTick(() => {\r\n          parentItemState?.updateSonSelected(value)\r\n        })\r\n    })\r\n    watch(groupExpanded, expanded => {\r\n      if (typeof menuState?.handleExpand === 'function') {\r\n        menuState.handleExpand(props.label, expanded, props.meta || {})\r\n      }\r\n    })\r\n    watch(\r\n      isHorizontal,\r\n      value => {\r\n        placement.value = value ? 'bottom' : isRtl.value ? 'left-start' : 'right-start'\r\n      },\r\n      { immediate: true },\r\n    )\r\n\r\n    if (menuState) {\r\n      watch(\r\n        [() => props.label, () => menuState.currentActive],\r\n        () => {\r\n          selected.value = props.label === menuState.currentActive\r\n        },\r\n        { immediate: true },\r\n      )\r\n\r\n      if (typeof menuState.increaseItem === 'function') {\r\n        menuState.increaseItem(itemState)\r\n      }\r\n    }\r\n\r\n    onBeforeUnmount(() => {\r\n      if (typeof menuState?.decreaseItem === 'function') {\r\n        menuState.decreaseItem(itemState)\r\n      }\r\n    })\r\n\r\n    expose({\r\n      groupExpanded,\r\n      isGroup,\r\n      showGroup,\r\n      isUsePopper,\r\n      handleSelect,\r\n      handleMouseEnter,\r\n      handleMouseLeave,\r\n    })\r\n\r\n    function updateSonSelected(selected: boolean, upstream = true) {\r\n      sonSelected.value = selected\r\n      upstream && parentItemState?.updateSonSelected(selected)\r\n    }\r\n\r\n    const { timer } = useSetTimeout()\r\n\r\n    function handleSelect() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (props.disabled) return\r\n\r\n      if (isGroup.value) {\r\n        if (isUsePopper.value && dropTrigger.value !== 'click') return\r\n\r\n        menuState?.doForEachItem(item => {\r\n          if (menuState.accordion) {\r\n            item.groupExpanded = false\r\n          }\r\n        })\r\n        groupExpanded.value = !groupExpanded.value\r\n      } else {\r\n        if (isUsePopper.value) {\r\n          toggleGroupExpanded(false, true)\r\n        }\r\n\r\n        if (menuState) {\r\n          menuState.handleSelect(props.label, props.meta || {}, props.route)\r\n        }\r\n\r\n        selected.value = true\r\n      }\r\n    }\r\n\r\n    function toggleGroupExpanded(expanded: boolean, upward = false) {\r\n      clearTimeout(timer.hover)\r\n\r\n      menuState?.doForEachItem(item => {\r\n        if (menuState.accordion) {\r\n          item.groupExpanded = false\r\n        }\r\n      })\r\n      groupExpanded.value = expanded\r\n\r\n      if (upward && typeof parentItemState?.toggleGroupExpanded === 'function') {\r\n        parentItemState.toggleGroupExpanded(expanded, upward)\r\n      }\r\n    }\r\n\r\n    let mouseInList = false\r\n    let reproduce = false\r\n\r\n    function handleMouseEnter() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (mouseInList || !isUsePopper.value || dropTrigger.value !== 'hover') return\r\n\r\n      if (!groupExpanded.value && popperShow.value) {\r\n        reproduce = true\r\n        return\r\n      }\r\n\r\n      if (typeof parentItemState?.handleMouseEnter === 'function') {\r\n        parentItemState.handleMouseEnter()\r\n      }\r\n\r\n      if (props.disabled || !isGroup.value) return\r\n\r\n      timer.hover = setTimeout(() => {\r\n        groupExpanded.value = true\r\n      }, hoverDelay.value)\r\n    }\r\n\r\n    function handleMouseLeave() {\r\n      clearTimeout(timer.hover)\r\n\r\n      if (mouseInList || !popperShow.value || !isUsePopper.value || dropTrigger.value !== 'hover') {\r\n        return\r\n      }\r\n\r\n      if (typeof parentItemState?.handleMouseLeave === 'function') {\r\n        parentItemState.handleMouseLeave()\r\n      }\r\n\r\n      if (props.disabled || !isGroup.value) return\r\n\r\n      timer.hover = setTimeout(() => {\r\n        groupExpanded.value = false\r\n      }, hoverDelay.value)\r\n    }\r\n\r\n    function handleClickOutside() {\r\n      if (isUsePopper.value && dropTrigger.value === 'click') {\r\n        nextTick(() => {\r\n          groupExpanded.value = false\r\n        })\r\n      }\r\n    }\r\n\r\n    function handlePopperHide() {\r\n      popperShow.value = false\r\n      groupExpanded.value = false\r\n\r\n      if (reproduce) {\r\n        reproduce = false\r\n\r\n        if (typeof parentItemState?.handleMouseEnter === 'function') {\r\n          parentItemState.handleMouseEnter()\r\n        }\r\n\r\n        if (props.disabled || !isGroup.value) return\r\n\r\n        groupExpanded.value = true\r\n      }\r\n    }\r\n\r\n    function handleKeySelect(event: KeyboardEvent) {\r\n      const key = event.code || event.key\r\n\r\n      if (key === 'Enter' || key === 'NumpadEnter') {\r\n        event.stopPropagation()\r\n        handleSelect()\r\n      } else if (key === 'Space') {\r\n        event.stopPropagation()\r\n        event.preventDefault()\r\n        handleSelect()\r\n      }\r\n    }\r\n\r\n    function renderChildren() {\r\n      if (!props.children?.length) {\r\n        return null\r\n      }\r\n\r\n      const renderItem = (item: MenuOptions) => (\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      return props.children.map(child => {\r\n        if (child.group) {\r\n          return (\r\n            <MenuGroup key={child.label} label={child.name ? callIfFunc(child.name) : child.label}>\r\n              {child.children?.map(renderItem)}\r\n            </MenuGroup>\r\n          )\r\n        }\r\n\r\n        return renderItem(child)\r\n      })\r\n    }\r\n\r\n    function renderArrow() {\r\n      const params = { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value }\r\n      const icon = props.arrow || menuState?.arrow || icons.value.angleDown.icon\r\n      const renderDefault = () => (\r\n        <Renderer renderer={props.slots.arrow} data={params}>\r\n          <Icon\r\n            {...icons.value.angleDown}\r\n            icon={icon}\r\n            class={{\r\n              [nh.be('arrow')]: true,\r\n              [nh.bem('arrow', 'visible')]: groupExpanded.value,\r\n              [nh.bem('arrow', 'son-selected')]: sonSelected.value,\r\n            }}\r\n          ></Icon>\r\n        </Renderer>\r\n      )\r\n\r\n      return menuState ? menuState.renderItemArrow(params, renderDefault) : renderDefault()\r\n    }\r\n\r\n    function renderLabel() {\r\n      return (\r\n        <Tooltip\r\n          placement={isRtl.value ? 'left' : 'right'}\r\n          reverse={tooltipReverse.value}\r\n          shift\r\n          transfer\r\n          disabled={tooltipDisabled.value}\r\n        >\r\n          {{\r\n            trigger: () => (\r\n              <div\r\n                ref={reference}\r\n                class={{\r\n                  [nh.be('label')]: true,\r\n                  [nh.bem('label', `marker-${markerType.value}`)]: true,\r\n                  [nh.bem('label', 'in-popper')]: parentItemState?.isUsePopper,\r\n                }}\r\n                role={'menuitem'}\r\n                tabindex={0}\r\n                aria-disabled={props.disabled ? 'true' : undefined}\r\n                style={labelStyle.value}\r\n                onClick={handleSelect}\r\n                onKeydown={handleKeySelect}\r\n                onMouseenter={handleMouseEnter}\r\n                onMouseleave={handleMouseLeave}\r\n              >\r\n                {(slots.icon || props.icon) && (\r\n                  <div class={nh.be('icon')}>\r\n                    {slots.icon ? (\r\n                      renderSlot(slots, 'icon')\r\n                    ) : (\r\n                      <Icon {...props.iconProps} icon={props.icon}></Icon>\r\n                    )}\r\n                  </div>\r\n                )}\r\n                <span\r\n                  class={{\r\n                    [nh.be('title')]: true,\r\n                    [nh.bem('title', 'in-group')]: !isHorizontal.value && isGroup.value,\r\n                  }}\r\n                >\r\n                  {slots.default ? renderSlot(slots, 'default') : props.label}\r\n                </span>\r\n                {isGroup.value &&\r\n                  renderSlot(\r\n                    slots,\r\n                    'arrow',\r\n                    { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value },\r\n                    () => [renderArrow()],\r\n                  )}\r\n              </div>\r\n            ),\r\n            default: () => (\r\n              <span class={nh.be('tooltip-title')}>\r\n                {slots.default ? renderSlot(slots, 'default') : props.label}\r\n              </span>\r\n            ),\r\n          }}\r\n        </Tooltip>\r\n      )\r\n    }\r\n\r\n    return () => {\r\n      return (\r\n        <li ref={wrapper} class={className.value} role={'none'}>\r\n          {renderLabel()}\r\n          <CollapseTransition appear>\r\n            {isGroup.value && !isUsePopper.value && (\r\n              <ul v-show={showGroup.value} class={nh.be('list')}>\r\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\r\n              </ul>\r\n            )}\r\n          </CollapseTransition>\r\n          {isGroup.value && isUsePopper.value && (\r\n            <Popper\r\n              ref={popper}\r\n              class={[\r\n                nh.be('popper'),\r\n                nh.bs('vars'),\r\n                isHorizontal.value && nh.bem('popper', 'drop'),\r\n              ]}\r\n              visible={popperShow.value && showGroup.value}\r\n              alive={!transferTo.value || popperShow.value}\r\n              to={transferTo.value}\r\n              transition={transition.value}\r\n              onAfterLeave={handlePopperHide}\r\n              onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\r\n              onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\r\n            >\r\n              <ul class={nh.be('list')}>\r\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\r\n              </ul>\r\n            </Popper>\r\n          )}\r\n        </li>\r\n      )\r\n    }\r\n  },\r\n})\r\n\r\n// eslint-disable-next-line vue/require-direct-export\r\nexport default MenuItem\r\n"],"names":["MenuGroup","defineAsyncComponent","MenuItem","defineComponent","name","props","menuItemProps","emits","setup","_props","slots","expose","useProps","label","default","static","icon","createIconProp","iconProps","disabled","transfer","trigger","transitionName","meta","children","route","arrow","menuState","inject","MENU_STATE","parentItemState","MENU_ITEM_STATE","groupState","MENU_GROUP_STATE","nh","useNameHelper","icons","useIcons","hoverDelay","useHoverDelay","isRtl","useRtl","baseClass","be","placement","ref","value","groupExpanded","selected","sonSelected","popperShow","indent","computed","propTransfer","inTransfer","markerType","wrapper","useClickOutside","handleClickOutside","popper","reference","transferTo","updatePopper","usePopper","shift","crossAxis","isGroup","group","length","showGroup","className","labelStyle","horizontal","isUsePopper","indentWidth","gcv","multiplier","isReduced","paddingInlineStart","undefined","groupType","tooltipDisabled","tooltipReverse","isHorizontal","transition","ns","dropTrigger","itemState","reactive","el","toRef","parentState","cachedExpanded","updateSonSelected","toggleGroupExpanded","handleMouseEnter","handleMouseLeave","provide","watch","immediate","emitEvent","onSelect","doForEachItem","item","nextTick","expanded","handleExpand","currentActive","increaseItem","onBeforeUnmount","decreaseItem","handleSelect","upstream","timer","useSetTimeout","clearTimeout","hover","accordion","upward","mouseInList","reproduce","setTimeout","handlePopperHide","handleKeySelect","event","key","code","stopPropagation","preventDefault","renderChildren","renderItem","_createVNode","callIfFunc","map","child","renderArrow","params","angleDown","renderDefault","Renderer","Icon","_mergeProps","bem","renderItemArrow","renderLabel","Tooltip","renderSlot","CollapseTransition","_withDirectives","_vShow","Popper","bs","onMouseenter","onMouseleave"],"mappings":"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"}