vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 5.77 kB
Source Map (JSON)
{"version":3,"file":"menu-group.mjs","sources":["../../../components/menu/menu-group.tsx"],"sourcesContent":["import { MenuItem } from '@/components/menu-item'\n\nimport { computed, defineComponent, inject, provide, reactive, ref, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineComponent({\n name: 'MenuGroup',\n props: {\n label: String,\n children: Array as PropType<MenuOptions[]>,\n },\n setup(_props, { slots }) {\n const props = useProps('menuGroup', _props, {\n label: {\n default: '',\n static: true,\n },\n children: {\n default: () => [],\n static: true,\n },\n })\n\n const menuState = inject(MENU_STATE, null)\n const parentItemState = inject(MENU_ITEM_STATE, null)\n\n const nh = useNameHelper('menu-group')\n const menuNh = useNameHelper('menu')\n const indent = ref(1)\n\n if (parentItemState) {\n indent.value = parentItemState.indent + 1\n }\n\n const titleStyle = computed(() => {\n return {\n paddingLeft: parentItemState?.isUsePopper\n ? undefined\n : `calc(${menuNh.gcv('indent-width')} * ${indent.value})`,\n }\n })\n const onlyShowSlot = computed(() => {\n return menuState?.horizontal && !parentItemState\n })\n\n provide(MENU_GROUP_STATE, reactive({ indent }))\n\n function renderChildren() {\n return renderSlot(slots, 'default', {}, () => {\n if (!props.children?.length) {\n return []\n }\n\n const renderItem = (item: MenuOptions) => (\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 return props.children.map(child => {\n if (child.group) {\n return (\n <MenuGroup\n key={child.label}\n label={child.name ? callIfFunc(child.name) : child.label}\n >\n {child.children?.map(renderItem)}\n </MenuGroup>\n )\n }\n\n return renderItem(child)\n })\n })\n }\n\n return () => {\n if (onlyShowSlot.value) {\n return slots.default?.()\n }\n\n return (\n <li class={nh.b()}>\n <div class={nh.be('label')}>\n <span class={nh.be('title')} style={titleStyle.value}>\n {slots.label ? slots.label() : props.label}\n </span>\n </div>\n <ul class={nh.be('list')}>{renderChildren()}</ul>\n </li>\n )\n }\n },\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuGroup\n"],"names":["MenuGroup","defineComponent","name","props","label","String","children","Array","setup","_props","slots","useProps","default","static","menuState","inject","MENU_STATE","parentItemState","MENU_ITEM_STATE","nh","useNameHelper","menuNh","indent","ref","value","titleStyle","computed","paddingLeft","isUsePopper","undefined","gcv","onlyShowSlot","horizontal","provide","MENU_GROUP_STATE","reactive","renderChildren","renderSlot","length","renderItem","item","_createVNode","MenuItem","icon","iconProps","disabled","route","meta","callIfFunc","map","child","group","b","be"],"mappings":"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"}