{"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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"}