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