11<script setup lang="ts">
22import type { SubMenuItemProps } from ' ./types'
3+ import { cn } from ' @/utils'
34import { rootMenuInjectionKey } from ' ./types'
45
56defineOptions ({
@@ -36,11 +37,11 @@ defineExpose({
3637
3738<template >
3839 <div
39- ref =" itemRef" class =" menu-item relative transition-all" :class = " {
40+ ref =" itemRef" : class =" cn(' menu-item relative transition-all', {
4041 'active': isItemActive,
4142 'py-1 px-2': (rootMenu.isMenuPopup && rootMenu.props.mode === 'vertical') || (rootMenu.isMenuPopup && level !== 0 && rootMenu.props.mode === 'horizontal') || !rootMenu.isMenuPopup,
4243 'px-1 py-2': rootMenu.isMenuPopup && level === 0 && rootMenu.props.mode === 'horizontal',
43- }"
44+ }) "
4445 >
4546 <router-link v-slot =" { href, navigate }" custom :to =" uniqueKey.at(-1) ?? ''" >
4647 <FaTooltip :disabled =" !rootMenu.isMenuPopup || level !== 0 || subMenu" :text =" typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title" :side =" rootMenu.props.mode === 'vertical' ? 'right' : 'bottom'" class =" h-full w-full" >
@@ -51,41 +52,40 @@ defineExpose({
5152 target: item.meta?.link ? '_blank' : '_self',
5253 class: 'no-underline',
5354 }),
54- }" class =" group menu-item-container relative h-full w-full flex cursor-pointer items-center justify-between gap-1 rounded-lg px-4 py-3 text-[var(--g-sub-sidebar-menu-color)] transition-all hover-(bg-[var(--g-sub-sidebar-menu-hover-bg)] text-[var(--g-sub-sidebar-menu-hover-color)])" :class = " {
55+ }" : class =" cn(' group menu-item-container relative h-full w-full flex cursor-pointer items-center justify-between gap-1 rounded-lg px-4 py-3 text-[var(--g-sub-sidebar-menu-color)] transition-all hover-(bg-[var(--g-sub-sidebar-menu-hover-bg)] text-[var(--g-sub-sidebar-menu-hover-color)])', {
5556 'text-[var(--g-sub-sidebar-menu-active-color)]! bg-[var(--g-sub-sidebar-menu-active-bg)]!': isItemActive,
56- 'px-3! ': rootMenu.isMenuPopup && level === 0,
57- }" :title =" typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title" v-on =" {
57+ 'px-3': rootMenu.isMenuPopup && level === 0,
58+ }) " :title =" typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title" v-on =" {
5859 ...(!subMenu && {
5960 click: navigate,
6061 }),
6162 }"
6263 >
6364 <div
64- class =" inline-flex flex-1 items-center justify-center gap-[12px] pl-[calc(var(--indent-level)*20px)]" :class = " {
65+ : class =" cn(' inline-flex flex-1 items-center justify-center gap-[12px] pl-[calc(var(--indent-level)*20px)]', {
6566 'flex-col': rootMenu.isMenuPopup && level === 0 && rootMenu.props.mode === 'vertical',
66- 'gap-1! ': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName,
67+ 'gap-1': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName,
6768 'w-full': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName && rootMenu.props.mode === 'vertical',
68- }" :style =" {
69+ }) " :style =" {
6970 '--indent-level': !rootMenu.isMenuPopup ? props.level ?? 0 : 0,
7071 }"
7172 >
7273 <FaIcon v-if =" props.item.meta?.icon" :name =" props.item.meta.icon" class =" menu-item-container-icon size-5 transition-transform group-hover-scale-120" />
7374 <span
74- v-if =" !(rootMenu.isMenuPopup && level === 0 && !rootMenu.props.showCollapseName)" class =" w-0 flex-1 truncate text-sm transition-height transition-opacity transition-width"
75- :class =" {
75+ v-if =" !(rootMenu.isMenuPopup && level === 0 && !rootMenu.props.showCollapseName)" :class =" cn('w-0 flex-1 truncate text-sm transition-height transition-opacity transition-width', {
7676 'opacity-0 w-0 h-0': rootMenu.isMenuPopup && level === 0 && !rootMenu.props.showCollapseName,
7777 'w-full text-center': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName,
78- }"
78+ }) "
7979 >
8080 {{ typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title }}
8181 </span >
8282 </div >
8383 <i
84- v-if =" subMenu && !(rootMenu.isMenuPopup && level === 0)" class =" relative ms-1 w-[10px] after:absolute before:absolute after:h-[1.5px] after:w-[6px] before:h-[1.5px] before:w-[6px] after:bg-current before:bg-current after:transition-transform-200 before:transition-transform-200 after:content-empty before:content-empty after:-translate-y-[1px] before:-translate-y-[1px]" :class = " [
85- expand ? 'before:-rotate-45 before:-translate-x-[2px] after:rotate-45 after:translate-x-[2px]' : 'before:rotate-45 before:-translate-x-[2px] after:-rotate-45 after:translate-x-[2px]',
86- rootMenu.isMenuPopup && level === 0 && 'opacity-0' ,
87- rootMenu.isMenuPopup && level !== 0 && '-rotate-90 -top-[1.5px]',
88- ] "
84+ v-if =" subMenu && !(rootMenu.isMenuPopup && level === 0)" : class =" cn(' relative ms-1 w-[10px] after:absolute before:absolute after:h-[1.5px] after:w-[6px] before:h-[1.5px] before:w-[6px] after:bg-current before:bg-current after:transition-transform-200 before:transition-transform-200 after:content-empty before:content-empty after:-translate-y-[1px] before:-translate-y-[1px]', {
85+ [ expand ? 'before:-rotate-45 before:-translate-x-[2px] after:rotate-45 after:translate-x-[2px]' : 'before:rotate-45 before:-translate-x-[2px] after:-rotate-45 after:translate-x-[2px]']: true ,
86+ 'opacity-0': rootMenu.isMenuPopup && level === 0,
87+ '-rotate-90 -top-[1.5px]': rootMenu.isMenuPopup && level !== 0 ,
88+ }) "
8989 />
9090 </component >
9191 </FaTooltip >
0 commit comments