{"version":3,"file":"menu-group.cjs","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":"8LAWMA,EAAYC,EAAAA,gBAAgB,CAChCC,KAAM,YACNC,MAAO,CACLC,MAAOC,OACPC,SAAUC,KACX,EACDC,MAAMC,EAAQ,CAAEC,MAAAA,CAAM,EAAG,CACvB,MAAMP,EAAQQ,EAAAA,SAAS,YAAaF,EAAQ,CAC1CL,MAAO,CACLQ,QAAS,GACTC,OAAQ,EACT,EACDP,SAAU,CACRM,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACV,CACF,CAAC,EAEKC,EAAYC,EAAAA,OAAOC,EAAU,WAAE,IAAI,EACnCC,EAAkBF,EAAAA,OAAOG,EAAe,gBAAE,IAAI,EAE9CC,EAAKC,EAAa,cAAC,YAAY,EAC/BC,EAASD,EAAa,cAAC,MAAM,EAC7BE,EAASC,EAAG,IAAC,CAAC,EAEhBN,IACFK,EAAOE,MAAQP,EAAgBK,OAAS,GAG1C,MAAMG,EAAaC,EAAAA,SAAS,KACnB,CACLC,YAAaV,GAAAA,MAAAA,EAAiBW,YAC1BC,OACA,QAAQR,EAAOS,IAAI,cAAc,CAAC,MAAMR,EAAOE,KAAK,GACzD,EACF,EACKO,EAAeL,EAAAA,SAAS,KACrBZ,GAAAA,YAAAA,EAAWkB,aAAc,CAACf,CAClC,EAEDgB,EAAO,QAACC,EAAgB,iBAAEC,WAAS,CAAEb,OAAAA,CAAO,CAAC,CAAC,EAE9C,SAASc,GAAiB,CACxB,OAAOC,aAAW3B,EAAO,UAAW,CAAE,EAAE,IAAM,OAC5C,GAAI,GAACP,EAAAA,EAAMG,WAANH,MAAAA,EAAgBmC,QACnB,MAAO,CAAE,EAGX,MAAMC,EAAcC,GAAiBC,EAAA,YAAAC,EAAA,CAAA,MAE1BF,EAAKpC,MAAK,KACXoC,EAAKG,KAAI,aACHH,EAAKI,UAAS,SAChBJ,EAAKK,SAAQ,SACbL,EAAKlC,SAAQ,MAChBkC,EAAKM,MAAK,KACXN,EAAKO,IAAI,EAAA,CAAAnC,QAAAA,IAAA,CAEd4B,EAAKtC,KAAO8C,EAAU,WAACR,EAAKtC,IAAI,EAAIsC,EAAKpC,KAAK,EAElD,EAED,OAAOD,EAAMG,SAAS2C,IAAIC,GACpBA,EAAMC,MACRV,EAAAA,YAAAzC,EAAA,CAAA,IAESkD,EAAM9C,MAAK,MACT8C,EAAMhD,KAAO8C,EAAAA,WAAWE,EAAMhD,IAAI,EAAIgD,EAAM9C,KAAK,EAAA,CAAAQ,QAAAA,IAAAA,OAAA,QAEvDsC,EAAAA,EAAM5C,WAAN4C,YAAAA,EAAgBD,IAAIV,EAAW,EAAA,CAAA,EAK/BA,EAAWW,CAAK,CACxB,CACH,CAAC,CACH,CAEA,MAAO,IAAM,OACX,OAAInB,EAAaP,OACRd,EAAAA,EAAME,UAANF,YAAAA,EAAAA,KAAAA,GAGT+B,EAAAA,YAAA,KAAA,CAAA,MACatB,EAAGiC,EAAC,CAAE,EAAA,CAAAX,EAAA,YAAA,MAAA,CAAA,MACHtB,EAAGkC,GAAG,OAAO,CAAC,EAAA,CAAAZ,EAAA,YAAA,OAAA,CAAA,MACXtB,EAAGkC,GAAG,OAAO,EAAC,MAAS5B,EAAWD,KAAK,EAAA,CACjDd,EAAMN,MAAQM,EAAMN,MAAO,EAAGD,EAAMC,KAAK,KAAAqC,EAAAA,YAAA,KAAA,CAAA,MAGnCtB,EAAGkC,GAAG,MAAM,GAAIjB,CAAAA,GAAgB,CAAA,CAAA,CAAA,CAGhD,CACH,CACF,CAAC"}